首页 > 解决方案 > 如何找到第一个最长的连续年份?

问题描述

微软 SQL 服务器 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 年。

标签: sqlsql-servertsql

解决方案


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;

是一个 db<>fiddle。

获取原始行有点棘手。这是一种方法:

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


推荐阅读