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