oracle of Continuous Record Query sql Case Test of SQL Skill

  • 2021-06-28 14:26:22
  • OfStack

Requirement Description:
Need to find out if a customer has been in business continuously for those days of a year

Implement SQL as follows:
Create tables:
 
create table test_num 
(tyear number, 
tdate date); 

Test data:
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;

Write 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) 

Related articles: