一尘不染

查找表中每个ID的最大连续年份(Oracle SQL)

sql

我正在尝试解决一个问题,该问题是如何在一系列记录中查找连续年份的最大数量。在以下示例中:

身份证年
1 1993年
1994年1月1日
1995年1月1日
1995年1月1日
1 2001
1 2002
1993年2月2日
1995年2月2日
1996年2月2日
1996年2月2日
1998年2月2日
1999年2月2日
2 2000
2001年2月2日
2001年2月2日

我的结果集应该看起来像

身份证数
1 3
2 4

我必须用oracle SQL编写代码。


阅读 166

收藏
2021-03-10

共1个答案

一尘不染

这将产生您想要的结果:

select
  id,
  ayear,
  byear,
  yeardiff
from
(
  select
    a.id,
    a.year ayear,
    b.year byear,
    (b.year - a.year)+1 yeardiff,
    dense_rank() over (partition by a.id order by (b.year - a.year) desc) rank
  from
    years a
    join years b on a.id = b.id 
        and b.year > a.year
  where
    b.year - a.year = 
      (select count(*)-1
         from years a1
        where a.id = a1.id
             and a1.year between a.year and b.year)
)
where
  rank = 1

编辑 已更新,以显示最长延伸的开始/结束年份。

SQLFiddle

2021-03-10