查找时间间隔内缺失的日期 (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
它对我的问题非常有效,但我无法理解它是如何增加日期的。
我想问问作者,但是他们的博客已经不存在了,他们的推特也不活跃了。
编辑: 有人说 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
子句。
我对 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
它对我的问题非常有效,但我无法理解它是如何增加日期的。
我想问问作者,但是他们的博客已经不存在了,他们的推特也不活跃了。
编辑: 有人说 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
子句。