使用填充数据生成综合日期范围
在数据库中,通常需要检索特定日期范围内的数据。但是,当某些日期的数据丢失时,显示零而不是将列留空会很有用。这可确保表示整个日期范围,从而提供更全面的数据视图。
问题:
您有一个包含日期和值数据的表,并且需要检索指定范围内的所有日期。如果特定日期没有行,您希望所有列显示零。
解决方案:
这可以通过使用创建一组日期来实现递归公用表表达式 (CTE),然后与现有数据表执行左连接。 CTE 生成指定范围内的一系列日期。左连接将生成的日期与现有行进行匹配,使用 ISNULL() 函数用零填充任何缺失值。
;with d(date) as ( select cast('10/01/2012' as datetime) union all select date+1 from d where date < '10/15/2012' ) 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)
MAXRECURSION 选项指定允许的最大递归迭代次数。在这种情况下,由于日期范围较小(15天),我们可以将其设置为0以允许无限迭代。
通过执行此查询,您将获得包含指定范围内的所有日期的完整数据集范围。任何缺失的日期都将用零填充,提供数据的全面表示。
以上是如何生成缺失数据的填充零值的综合日期范围?的详细内容。更多信息请关注PHP中文网其他相关文章!