SQL – возвращает 0s, если не существует группы

У меня есть сводная таблица, которая суммирует необработанные данные за определенный час. Это выглядит примерно так:

stats_hours: - obj_id : integer - start_at : datetime - count : integer 

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

Я хотел бы построить запрос, который возвращает набор данных в день, так что примерно так:

 Date | sum_count 2014-06-01 | 2000 2014-06-02 | 3000 2014-06-03 | 0 2014-06-04 | 5000 

Запрос, который я создал, группирует в столбце даты и суммирует счетчик:

 SELECT date(start_at) as date, sum(count) as sum_count FROM stats_hours GROUP BY date; 

Это отлично работает, если у меня нет данных за определенную дату, и в этом случае он явно не учитывает строку:

 Date | sum_count 2014-06-01 | 2000 2014-06-02 | 3000 2014-06-04 | 5000 

Кто-нибудь знает о хорошем способе SQL для возврата нулевой строки в случае отсутствия данных для данной группы дат? Может быть, какое-то дело?

Сначала вам нужен полный список дат, а затем подключите этот список к вашим доступным датам и группе. Попробуйте следующее:

 --define start and end limits Declare @todate datetime, @fromdate datetime Select @fromdate='2009-03-01', @todate='2014-06-04' ;With DateSequence( Date ) as ( Select @fromdate as Date union all Select dateadd(day, 1, Date) from DateSequence where Date < @todate ) --select result SELECT DateSequence.Date, SUM(Stats_Hours.Count) AS Sum_Count FROM DateSequence LEFT JOIN Stats_Hours ON DateSequence.Date = Stats_Hours.Start_At GROUP BY DateSequence.Date option (MaxRecursion 0) 

EDIT: код CTE из этого сообщения