【问题标题】:Adding a sequence group number based on the column value根据列值添加序列组号
【发布时间】:2021-11-29 07:17:43
【问题描述】:

我有一个如下所示的面板数据:

ID TFvalue Date        
1    0     2021-01-01     
1    0     2021-02-01     
1    1     2021-03-01     
1    1     2021-04-01     
2    0     2021-01-10     
2    1     2021-02-10    
2    0     2021-03-10    
2    0     2021-04-10     
3    1     2021-01-05     
3    1     2021-02-05     
3    0     2021-03-05    
3    1     2021-04-05     

我需要为每个 id 分组行,直到出现来自 TFvalue 的 1。每次出现来自TFvalue 的 1 时,需要在之后给出一个新组,序列号。比如我需要的是...

ID TFvalue Date         GroupNum
1    0     2021-01-01     1
1    0     2021-02-01     1
1    1     2021-03-01     1
1    1     2021-04-01     2
2    0     2021-01-10     1
2    1     2021-02-10     1
2    0     2021-03-10     2
2    0     2021-04-10     2
3    1     2021-01-05     1
3    1     2021-02-05     2
3    0     2021-03-05     3
3    1     2021-04-05     3

我尝试了Dense_Rank(),但没有得到我想要的。任何建议将不胜感激。

【问题讨论】:

    标签: mysql sql window-functions


    【解决方案1】:

    您可以检查TFvalue 的先前值以获取flag 列,如果先前的值为1null,则该列将为1,如果先前的值为@987654328,则为0 @.
    然后使用SUM() 窗口函数,您将获得GroupNum 列:

    SELECT ID, TFvalue, Date, 
           SUM(flag) OVER (PARTITION BY ID ORDER BY Date) GroupNum
    FROM (
      SELECT *, LAG(TFvalue, 1, 1) OVER (PARTITION BY ID ORDER BY Date) flag
      FROM tablename
    ) t; 
    

    请参阅demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-25
      • 1970-01-01
      • 2021-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-09
      • 1970-01-01
      相关资源
      最近更新 更多