我正在尝试解决一个问题,该问题是如何在一系列记录中查找连续年份的最大数量。在以下示例中:
身份证年 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编写代码。
这将产生您想要的结果:
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