利用rownum可以得到連續數字中的一段。例如有以下數據:
fphm,kshm
2014,00000001
2014,00000002
2014,00000003
2014,00000004
2014,00000005
2014,00000007
2014,00000008
2014,00000009
2013,00000120
2013,00000121
2013,00000122
2013,00000124
2013,00000125
希望實現最終結果如下:
2014 00000001 00000005
2014 00000007 00000009
2013 00000120 00000122
2013 00000124 00000125
解決方案:
一. 利用rownum僞列 實現SQL:
select b.fphm,min(b.kshm),max(b.kshm)
from (
select a.*,to_number(a.kshm-rownum) cc
from (
select * from t order by fphm,kshm
) a
) b
group by b.fphm,b.cc
/
二、利用rownum分析函數
SELECT fphm, MIN(kshm),MAX(kshm)
FROM
( SELECT fphm, kshm, kshm-ROW_NUMBER() OVER (PARTITION BY fphm ORDER BY kshm ) AS RN
FROM T
)
GROUP BY fphm,RN;
三、最簡潔SQL
select max(fphm),min(kshm),max(kshm)
from test
group by fphm||khsm-rownum
其他:
1. 可以通過rownum實現間斷數據的分割。
2. 可以利用rownum求一組不連續數據的最小值。(這通常可以用來補足一串數字,很有用,曾經用過)
文章來源:http://www.itpub.net/viewthread.php?tid=354052&extra=&page=1
更多解決方案:http://blog.itpub.net/post/5042/27936