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

finding missing dates in a time interval (SQL)

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

DECLARE @StartDate DATETIME DECLARE @EndDate DATETIME

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

;WITH Dates(Date) AS
(
    SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @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

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

我想问问作者,但是他们的博客已经不存在了,他们的推特也不活跃了。

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

这是递归 CTE,或 Common Table Expression

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

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