站长网 百科 在Oracle中字段值更改时增加行号

在Oracle中字段值更改时增加行号

我需要帮助在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 我需要有一个Grou

我需要帮助在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

本文来自网络,不代表站长网立场,转载请注明出处:https://www.zwzz.com.cn/html/baike/2021/0524/5596.html

作者: dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。
联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部