sql >> Database >  >> RDS >> Oracle

rijnummer verhogen wanneer waarde van veld verandert in Oracle

U kunt de analytische functies combineren SUM (gebruikt als lopend totaal) en LAG :

SQL> WITH data AS (
  2            SELECT 'person1' person, 'day1' day, 'Y' flag FROM dual
  3  UNION ALL SELECT 'person1' person, 'day2' day, 'Y' flag FROM dual
  4  UNION ALL SELECT 'person1' person, 'day3' day, 'Y' flag FROM dual
  5  UNION ALL SELECT 'person1' person, 'day4' day, 'N' flag FROM dual
  6  UNION ALL SELECT 'person1' person, 'day5' day, 'N' flag FROM dual
  7  UNION ALL SELECT 'person1' person, 'day6' day, 'Y' flag FROM dual
  8  UNION ALL SELECT 'person1' person, 'day7' day, 'Y' flag FROM dual
  9  UNION ALL SELECT 'person1' person, 'day8' day, 'Y' flag FROM dual
 10  )
 11  SELECT person, DAY, flag, SUM(gap) over (PARTITION BY person
 12                                           ORDER BY DAY) grp
 13    FROM (SELECT person, DAY, flag,
 14                 CASE WHEN flag = lag(flag) over (PARTITION BY person
 15                                                  ORDER BY DAY)
 16                      THEN 0
 17                      ELSE 1
 18                 END gap
 19            FROM DATA);

PERSON  DAY  FLAG        GRP
------- ---- ---- ----------
person1 day1 Y             1
person1 day2 Y             1
person1 day3 Y             1
person1 day4 N             2
person1 day5 N             2
person1 day6 Y             3
person1 day7 Y             3
person1 day8 Y             3



  1. Barman gebruiken om een ​​back-up te maken van PostgreSQL - een overzicht

  2. MSDTC op server 'server is niet beschikbaar'

  3. schuine streep voor elk citaatprobleem

  4. Kom naar Amsterdam voor een Meetup met OptimaData &VidaXL