Я пытаюсь написать один запрос для получения информации о времени для нескольких пользователей за диапазон дат.Заполните пропущенные даты для нескольких значений с помощью GROUP BY
Мои таблицы устанавливаются следующим образом:
запись:
user_id | entry_date | entry_hours
1 | 2013-11-12 | 4
1 | 2013-11-12 | 5
1 | 2013-11-13 | 3
2 | 2013-11-13 | 7
....
Календарь:
calendar_date
.....
2013-11-10
2013-11-11
2013-11-12
2013-11-13
2013-11-14
.....
Если я запускаю этот запрос:
SELECT *, e.user_id, e.entry_date, COALESCE(SUM(e.entry_hours), 0) as total
FROM `entry` e
WHERE entry_date BETWEEN '2013-11-12' and '2013-11-13'
GROUP BY e.user_id, e.entry_date
я получаю что-то к действию
user_id | entry_date | total
1 | 2013-11-12 | 9
1 | 2013-11-13 | 3
2 | 2013-11-13 | 7
Когда я хотел бы вместо этого:
user_id | entry_date | total
1 | 2013-11-12 | 9
1 | 2013-11-13 | 3
2 | 2013-11-12 | 0
2 | 2013-11-13 | 7
Где заполняет пропущенное свидание с 0.
EDIT: Я также должен будет его тянуть в User_ID х с 0-х, когда у них нет перечисленных записей. Скажем, я включил там WHERE
статьи AND user_id IN (1,2,3)
, я хотел бы получить что-то вроде:
user_id | entry_date | total
1 | 2013-11-12 | 9
1 | 2013-11-13 | 3
2 | 2013-11-12 | 0
2 | 2013-11-13 | 7
3 | 2013-11-12 | 0
3 | 2013-11-13 | 0
Идея таблицы календаря должна была быть в состоянии вывести все даты в диапазоне и присоединиться к ним с таблицей ввода, чтобы заполнить те отсутствующие даты, но я не мог понять, как это сделать.
Может ли кто-нибудь указать мне правильное направление?
Я знал, что забыл что-то в исходном посте - см. Мое редактирование. Мне также нужно заполнить 0, где user_id будет предоставлен в предложении where, но в таблице для этого пользователя нет записей. – Samsquanch
Вам понадобится отдельная таблица, в которой перечислены ваши пользователи, точно так же, как календарь – Anon
У меня есть таблица пользователей, которая содержит user_id - мне также нужно будет присоединиться к этому? – Samsquanch