寻找日期差距
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 加入日期列并列出缺失的
我有一个包含 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 加入日期列并列出缺失的