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
Post a Comment