我有一个汇总表,用于汇总给定小时的原始数据。它看起来像这样:
stats_hours:
- obj_id : integer
- start_at : datetime
- count : integer
obj_id指向一个单独的表,start_at字段包含数据小时开始的时间戳,count包含该小时数据的总和。
我想构建一个每天返回一组数据的查询,如下所示:
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中返回归零行的好方法?也许某种案例陈述?
答案 0 :(得分:4)
您需要先填写完整的日期列表,然后将该列表连接到您的可用日期并按此分组。请尝试以下方法:
--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)
编辑:来自this post的CTE代码