2013-11-26 3 views
0

Я пытаюсь написать один запрос для получения информации о времени для нескольких пользователей за диапазон дат.Заполните пропущенные даты для нескольких значений с помощью 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 

Идея таблицы календаря должна была быть в состоянии вывести все даты в диапазоне и присоединиться к ним с таблицей ввода, чтобы заполнить те отсутствующие даты, но я не мог понять, как это сделать.

Может ли кто-нибудь указать мне правильное направление?

ответ

1
SELECT 
    u.user_id, 
    c.calendar_date, 
    COALESCE(SUM(e.entry_hours), 0) 
FROM calendar c 
CROSS JOIN users u 
LEFT JOIN entry e 
    ON (c.calendar_date = e.entry_date AND u.user_id = e.user_id) 
GROUP BY u.user_id,c.calendar_date 
+0

Я знал, что забыл что-то в исходном посте - см. Мое редактирование. Мне также нужно заполнить 0, где user_id будет предоставлен в предложении where, но в таблице для этого пользователя нет записей. – Samsquanch

+0

Вам понадобится отдельная таблица, в которой перечислены ваши пользователи, точно так же, как календарь – Anon

+0

У меня есть таблица пользователей, которая содержит user_id - мне также нужно будет присоединиться к этому? – Samsquanch