如何找到连续最长的第一年?

时间:2019-07-03 23:10:16

标签: sql sql-server tsql

MS SQL Server 2017 +

该表只有一列。

数据已经排序。

该列包含一些重复的年份。

请参见下面的示例数据:

create table test1 (year int)

insert into test1 values
(1992), --1
(1993), --2
(1994), --3
(1995), --4
(1995), --4
(1997), --1
(1998), --2
(2000), --1
(2001), --2
(2002), --3
(2003), --4
(2003), --4
(2008)  --1

预期结果:

1992
1993
1994
1995

请注意,2000-2003年也是连续4年,但我只希望样本数据中的第一个最长的年份是1992-1995年。

1 个答案:

答案 0 :(得分:3)

SQL表表示无序集。除非有列指定该顺序,否则不对表进行排序。对于您而言,该列似乎为year

我认为最简单的解决方案是连续一年。您可以通过从年份中减去序列号来找到它-差异的常数表示年份序列。

其余只是订购,select top

select top (1) min(year), max(year)
from (select t.*, dense_rank() over (order by year) as seqnum
      from test1 t
     ) t
group by year - seqnum
order by max(year) - min(year) desc, min(year) asc;

Here是db <>小提琴。

获取原始行比较棘手。这是一种方法:

select top (1) with ties year, max(year) over (partition by year - seqnum) - min(year) over (partition by year - seqnum) as cnt
from (select t.*, dense_rank() over (order by year) as seqnum
      from test1 t
     ) t
order by max(year) over (partition by year - seqnum) - min(year) over (partition by year - seqnum) desc,
         min(year) over (partition by year - seqnum)

还有一个dbfiddle