微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在时间间隔内查找缺失的日期 (SQL)

如何解决在时间间隔内查找缺失的日期 (SQL)

我对 sql 有点菜鸟,所以我一直在寻找一些代码,当我偶然发现这段代码时,这些代码可能会帮助我找到某个时间间隔内缺失的日期值。

DECLARE @StartDate DATETIME DECLARE @EndDate DATETIME

SET @StartDate ='2014-03-01' SET @EndDate = GETDATE()

;WITH Dates(Date) AS
(
    SELECT DATEADD(dd,DATEDIFF(dd,@StartDate)) AS Date
    UNION ALL
    SELECT DATEADD(day,1,Date) AS Date
    FROM Dates
    WHERE Date <= @EndDate
)
SELECT d.Date,r.Value
FROM Dates d
LEFT JOIN Times r ON d.Date = r.Date

Link to the code

它对我的问题非常有效,但我无法理解它是如何增加日期的。

我想问作者,但他们的博客已不存在,而且他们的推特也处于非活动状态。

编辑:有人说该帖子缺少问题。我想知道这个 CTE 如何递归地将 +1 添加到从 @StartDate 到 @EndDate 的每个日期。

解决方法

这是递归 CTE,或 Common Table Expression

CTE SELECT DATEADD(dd,DATEDIFF(dd,@StartDate)) AS Date 的第一行是种子或根部分。下一个 UNION 部分获取该日期,添加一天,然后递归。

请注意,在 Dates 块内您选择了 FROM Dates,因此它将继续生成日期递增的行,直到满足 WHERE 子句。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。