Эта проблема немного сложнее, чем кажется на первый взгляд.
Вам нужно будет объединить три подзапроса, каждый с одной строкой на имя и дату.
Первый подзапрос дает вам все возможные имена и даты. Он вам нужен, потому что в одном из ваших двух файлов сведений могут отсутствовать некоторые комбинации имени / даты, а в другом -
SELECT DISTINCT name, created_at
FROM (
SELECT name, DATE(created_at) created_at FROM fb
UNION
SELECT name, DATE(created_at) created_at FROM gg
) a
Второй подзапрос получает количество сеансов для каждого имени / даты.
SELECT name,
DATE(CREATED_AT) created_at,
SUM(sessions) sessions
FROM gg
GROUP BY name, DATE(created_at)
Третий делает то же самое для дохода.
SELECT name,
DATE(CREATED_AT) created_at,
SUM(revenue) revenue
FROM fb
GROUP BY name, DATE(created_at)
Затем вы ЛЕВОЙ СОЕДИНЯЕТЕ второй и третий подзапросы с первым подзапросом.
SELECT items.name, items.created_at, sess.sessions, rev.revenue
FROM (first subquery) items
LEFT JOIN (second subquery) sess ON items.name = sess.name
AND items.created_at = sess.created_at
LEFT JOIN (third subquery) rev ON items.name = rev.name
AND items.created_at = rev.created_at
Все вместе, вы получаете это .
SELECT items.name, items.created_at, sess.sessions, rev.revenue
FROM (SELECT DISTINCT name, created_at
FROM (
SELECT name, DATE(created_at) created_at FROM fb
UNION
SELECT name, DATE(created_at) created_at FROM gg
) a
) items
LEFT JOIN (SELECT name,
DATE(CREATED_AT) created_at,
SUM(sessions) sessions
FROM gg
GROUP BY name, DATE(created_at)
) sess ON items.name = sess.name
AND items.created_at = sess.created_at
LEFT JOIN (SELECT name,
DATE(CREATED_AT) created_at,
SUM(revenue) revenue
FROM fb
GROUP BY name, DATE(created_at)
) rev ON items.name = rev.name
AND items.created_at = rev.created_at
https://www.db-fiddle.com/f/hiAKaSDWn1FuUufF3oLbgZ/0