检索日期范围内具有零值的缺失日期
原始查询检索两个日期之间的数据,但排除了缺失的日期。要包含缺失的日期并为缺失的数据分配零值,我们可以利用一种称为“日期标记”的技术。
标记缺失日期
递归公用表表达式(CTE)可用于生成指定范围内的一系列日期。 CTE 名为 d,从范围的第一个日期开始,并递归添加一天,直到到达结束日期。
;with d(date) as ( select cast('10/01/2012' as datetime) union all select date+1 from d where date < '10/15/2012' )
加入现有数据
接下来,我们在 CTE d 和原始数据表 temp (t) 之间执行左外连接,以检索每个日期的现有数据。如果 temp 中存在日期,则使用该值;否则,我们替换零。
select t.ID, d.date CDate, isnull(t.val, 0) val from d left join temp t on t.CDate = d.date order by d.date OPTION (MAXRECURSION 0) -- use this if your dates are >99 days apart
有关 MAXRECURSION 的注意事项
OPTION (MAXRECURSION 0) 子句可防止查询因日期范围内的过度递归而失败太大了。您可以调整该值以适合您的特定数据范围。
通过使用此技术,我们可以检索两个日期之间的所有日期,包括缺失的日期,同时确保缺失的值表示为零。
以上是如何在 SQL 查询中用零值填充缺失的日期?的详细内容。更多信息请关注PHP中文网其他相关文章!