我有一些订购日期:
2013-01-01
2013-02-01
2014-01-01
2014-06-01
2016-01-01
2016-03-01
我只想拍摄一年或更长时间之前存在的那些,所以我的输出应该是:
2013-01-01
2013-02-01
2014-01-01
2014-06-01
(2014-06-01至2016-01-01之间的跳跃时间超过1年)
在SQL中有一种简单优雅的方法吗?通常我会将数据分成2个表,分配一个表偏移一个表的行号,并计算每个日期之间的差异,注意出现第一个差距的行号。
这是一个我经常遇到的问题,并且会从一个简单的解决方案中受益匪浅。
答案 0 :(得分:1)
如果您有可用的窗口功能
Declare @YourTable table (SomeDate Date)
Insert Into @YourTable values
('2013-01-01'),
('2013-02-01'),
('2014-01-01'),
('2014-06-01'),
('2016-01-01'),
('2016-03-01')
;with cteBase as (
Select *,PrevYear=Lag(Year(SomeDate),1,Year(SomeDate)) over (Order By SomeDate)
From @YourTable
)
Select * from cteBase where Year(SomeDate)-PrevYear=0
返回
SomeDate PrevYear
2013-01-01 2013
2013-02-01 2013
2014-06-01 2014
2016-03-01 2016