Итак, у меня есть этот запрос, который выбирает пользователей, некоторые данные, некоторые фильтры (например, группу, в которой они находятся, и прочее) и вместе с ними сумму, которую они произвели (в $) в прошлом месяце (получить последнюю существующую запись). с прошлого месяца, используя MAX(created_date)
), для платформы управления, которая показывает, сколько они произвели в этом месяце и в предыдущем (us.amount_produced
и up.amount_produced last_month_amount
).
Проблема в том, что он не выбирает новых пользователей (которые не произвели ни одной суммы в прошлом месяце), и мне нужно, чтобы те тоже возвращались.
Любая помощь приветствуется, спасибо
(я думал о выполнении JOIN или даже двух запросах, но я уверен в лучшем подходе)
Обратите внимание на приведенных ниже примерах, что пользователь # У 3 не было журналов в таблице User_Performance до февраля, он был создан в феврале. Таким образом, приведенный ниже запрос не вернет его (мне нужно его вернуть)
Структура таблицы пользователя:
Users
id email login amount_produced created_date
---------------------------------------------
1 foo@bar.com foo 1000 2019-12-20 22:30:01
2 jack@gmail.com jack 0 2019-12-20 22:30:01
3 john@gmail.com john 2000 2020-02-01 00:00:01
Структура таблицы User_Group_Config:
User_Group_Config
user_id group_id
---------------------------------------------
1 4
2 1
3 4
User_Performance структура таблицы эта таблица представляет собой таблицу журнала, в которую задание вставляет данные каждый час, вычисляя производительность пользователей и ведя журнал :
Users
user_id amount_produced created_date
---------------------------------------------
1 500 2020-01-31 22:30:01
2 0 2020-01-31 22:30:01
1 500 2020-01-31 23:30:01
2 0 2020-01-31 23:30:01
1 1000 2020-02-01 00:30:01
2 0 2020-02-01 00:30:01
3 0 2020-02-01 00:30:01
SELECT
us.id,
us.email,
us.login,
ugc.group_id,
up.user_id,
up.amount_produced last_month_amount
FROM
db.User_Performance AS up,
db.User_Group_Config ugc,
db.User AS us
WHERE
created_date IN (SELECT
MAX(created_date)
FROM
User_Performance
WHERE
/* Here it filters only users that have data last month, I need these AND the ones that have no data to return zero here or null or undefined at this row)*/
MONTH(created_date) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)
GROUP BY user_id)
AND ugc.group_id = 4
AND up.user_id = ugc.user_id
AND us.id = up.user_id;
Желаемые результаты (примечание этот пользователь # 2 не был выбран, так как его group_id # 1
Results
(current month) (previous month)
id email login amount_produced last_month_amount
---------------------------------------------
1 foo@bar.com foo 1000 500
3 john@gmail.com john 0 null or 0