需求說明:
需要查詢出某個客戶某一年那些天是有連續辦理過業務
實現SQL如下:
創建表:
create table test_num (tyear number, tdate date);
測試數據:
insert into test_num select 2014,trunc(sysdate)-1 from dual union all select 2014,trunc(sysdate)-002 from dual union all select 2014,trunc(sysdate)-003 from dual union all select 2014,trunc(sysdate)-004 from dual union all select 2014,trunc(sysdate)-005 from dual union all select 2014,trunc(sysdate)-007 from dual union all select 2014,trunc(sysdate)-008 from dual union all select 2014,trunc(sysdate)-009 from dual union all select 2013,trunc(sysdate)-120 from dual union all select 2013,trunc(sysdate)-121 from dual union all select 2013,trunc(sysdate)-122 from dual union all select 2013,trunc(sysdate)-124 from dual union all select 2013,trunc(sysdate)-125 from dual union all select 2013,trunc(sysdate)-127 from dual union all select 2015,trunc(sysdate)-099 from dual union all select 2015,trunc(sysdate)-100 from dual union all select 2015,trunc(sysdate)-101 from dual union all select 2015,trunc(sysdate)-102 from dual union all select 2015,trunc(sysdate)-104 from dual union all select 2015,trunc(sysdate)-105 from dual;
寫SQL:
SELECT TYEAR, MIN(TDATE) AS STARTDATE, MAX(TDATE), COUNT(TYEAR) AS ENDNUM FROM (SELECT A.*, A.TDATE - ROWNUM AS GNUM FROM (SELECT * FROM TEST_NUM ORDER BY TYEAR, TDATE) A) GROUP BY TYEAR, GNUM ORDER BY TYEAR, MIN(TDATE)
運用連續記錄之間相差都是1,因此連續記錄用日期-rownum后的差值都是一樣的,這樣就可以得出連續記錄。