七叶笔记 » 数据库 » SQL查询连续号码段的巧妙解法

SQL查询连续号码段的巧妙解法

方法二: 使用lag/lead分析函数进行处理.. 楼上的方法确实挺好用就是觉得表扫描/表连接比较多, 可能数据量大了. 速度会比较慢, 当然我的这种方法由于使用分析函数使用的比较频繁.所以排序量可能比上一种要多..

方法三: 今天早上wildflower给了我这个答案, 顿时觉得耳目一新啊..就贴出来与大家一起共享了^_^.

SQL> spool aaa.logSQL> set echo onSQL> select * from t;

no rows selected

SQL> select * from t;

      FPHM       KSHM---------- ----------      2014          1      2014          2      2014          3      2014          4      2014          5      2014          7      2014          8      2014          9      2013        120      2013        121      2013        122

      FPHM       KSHM---------- ----------      2013        124      2013        125

13 rows selected.

SQL> @bbb.sqlSQL> select b.fphm,min(b.kshm),max(b.kshm)  2  from (  3          select a.*,to_number(a.kshm-rownum) cc  4          from (  5                  select * from t order by fphm,kshm  6          ) a  7  )  b  8  group by b.fphm,b.cc  9  /

      FPHM MIN(B.KSHM) MAX(B.KSHM)---------- ----------- -----------      2013         120         122      2013         124         125      2014           1           5      2014           7           9

SQL>

相关文章