1. 程式人生 > >Oracle求連續區間內的最大最小值

Oracle求連續區間內的最大最小值

現在有一組資料記錄了NBA球隊每年的奪冠隊伍,如下:


要求求出連續奪冠的隊伍和連續年月,效果如下:


首先要判斷一個隊是否連續奪冠,我們可以通過lag函式來獲取欄位的上一個值,就比較容易判斷了。


然後給判斷賦值,連續的為0,不連續的 為1。


然後使用累加為後續的分組作準備:


最後就是很基礎的分組求最大最小值過程了,就不再贅述了。最終sql如下:

select team,min(y),max(y) from (
select team,y,sum(b)over(order by y)c
from
(
select team,y,
case 
  when team=lag(team)over(order by y) then 0 else 1 end as b
from nba))
group by c,team having count(1)>1
order by 2