寻找日期差距

Finding a gap in dates

我有一个包含 3 列的 table:

Date smalldatetime not null
Val1 decimal not null
Val2 decimal not null

还有很多数据在这table。并非所有日历日期都显示在 table 中。如何找到日期间隔超过 x 天的所有地点?

以下是您可以执行此操作的方法:

DECLARE @t TABLE
    (
      Date SMALLDATETIME NOT NULL ,
      Val1 DECIMAL NOT NULL ,
      Val2 DECIMAL NOT NULL
    )

INSERT INTO @t VALUES
('20150101', 1, 1),
('20150104', 1, 1),
('20150109', 1, 1),
('20150201', 1, 1),
('20150305', 1, 1),
('20150506', 1, 1)


;WITH cte AS(SELECT *, ROW_NUMBER() OVER(ORDER BY Date) AS Rn FROM @t)
SELECT c2.*, c1.Date AS PrevDate FROM cte c1
JOIN cte c2 ON c1.Rn = c2.Rn - 1
WHERE DATEDIFF(d, c1.Date, c2.Date) > 30 --this is your X

输出:

Date                Val1    Val2    Rn  PrevDate
2015-03-05 00:00:00 1       1       5   2015-02-01 00:00:00
2015-05-06 00:00:00 1       1       6   2015-03-05 00:00:00

您可以在 SQL 服务器数据库中创建日期 table 并使用 SQL date table to find gaps in date

日期 table 是参考 table,其中包括所有可能的日期。您将比较目标 table 与日期 table 加入日期列并列出缺失的