Я пытаюсь написать один запрос для получения информации о времени для нескольких пользователей в диапазоне дат.
Мои таблицы настроены следующим образом:
Вход:
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
Идея таблицы календаря заключалась в том, чтобы иметь возможность вытащить все даты в диапазоне и соединить их с таблицей ввода, чтобы заполнить эти отсутствующие даты, но я не смог понять, как это сделать.
Может кто-то указать мне верное направление?