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

РЕДАКТИРОВАТЬ: мне также нужно было бы вводить 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

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

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


person Samsquanch    schedule 26.11.2013    source источник


Ответы (1)


person    schedule
comment
Я знал, что что-то забыл в исходном посте — см. мое редактирование. Мне также нужно заполнить 0, где user_id указан в предложении where, но в таблице нет записей для этого пользователя. - person Samsquanch; 27.11.2013
comment
Вам понадобится отдельная таблица со списком ваших пользователей, как в календаре. - person Anon; 27.11.2013
comment
У меня есть таблица пользователей, которая содержит user_id — нужно ли мне также присоединиться к ней? - person Samsquanch; 27.11.2013
comment
да. Все в вашем результате должно исходить откуда-то. Если вы хотите, чтобы user_id отсутствовали в таблице записей, вам нужно ввести таблицу, в которой они есть. - person Anon; 27.11.2013