SQL - 选择日期,省略显示间隙后的日期

时间:2016-10-03 15:57:47

标签: sql

我有一些订购日期:

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个表,分配一个表偏移一个表的行号,并计算每个日期之间的差异,注意出现第一个差距的行号。

这是一个我经常遇到的问题,并且会从一个简单的解决方案中受益匪浅。

1 个答案:

答案 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