在Oracle中字段值变动时增进行号
发布时间:2021-05-26 02:48:30 所属栏目:站长百科 来源:网络整理
导读:我必要辅佐在Oracle中编写查询以获取以下数据.数据按职员和日期字段排序. 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 我必要有一个Group_
我必要辅佐在Oracle中编写查询以获取以下数据.数据按职员和日期字段排序. 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 我必要有一个Group_Number列,只要Flag值产生变革就会增进.我的功效应如下所示 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 我以为有步伐行使说明函数,如ROW_NUMBER,LEAD等得到上述功效. 您可以将 analytic functions SUM(用作运行总计)和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,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 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |