increment row number when value of field changes in Oracle -


i need in writing query in oracle following data. data sorted person , day fields.

    person     day   flag     ------     ---   ----      person1    day1   y     person1    day2   y     person1    day3   y     person1    day4   n     person1    day5   n     person1    day6   y     person1    day7   y     person1    day8   y 

i need have group_number column gets incremented whenever flag value changes. result should below

    person     day   flag  group_number     ------     ---   ----  ------------     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 

i think there way above result using analytic functions such row_number, lead etc.

you can combine analytic functions sum (used running total) , lag:

sql> data (   2            select 'person1' person, 'day1' day, 'y' flag dual   3  union select 'person1' person, 'day2' day, 'y' flag dual   4  union select 'person1' person, 'day3' day, 'y' flag dual   5  union select 'person1' person, 'day4' day, 'n' flag dual   6  union select 'person1' person, 'day5' day, 'n' flag dual   7  union select 'person1' person, 'day6' day, 'y' flag dual   8  union select 'person1' person, 'day7' day, 'y' flag dual   9  union select 'person1' person, 'day8' day, 'y' flag dual  10  )  11  select person, day, flag, sum(gap) on (partition person  12                                           order day) grp  13    (select person, day, flag,  14                 case when flag = lag(flag) on (partition person  15                                                  order day)  16                      0  17                      else 1  18                 end gap  19            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 

Comments

Popular posts from this blog

Change php variable from jquery value using ajax (same page) -

Pull out data related to my apps from Android Play Store and iOS App Store -

How can I fetch data from a web server in an android application? -