【问题标题】:Tagging consecutive days标记连续天数
【发布时间】:2014-06-01 03:18:10
【问题描述】:

假设我有这样的数据:

ID,DATE

101,01jan2014

101,02jan2014

101,03jan2014

101,07jan2014

101,08jan2014

101,10jan2014

101,12jan2014

101,13jan2014

102,08jan2014

102,09jan2014

102,10jan2014

102,15jan2014

我怎样才能在 Greenplum SQL 中有效地编写代码,以便我可以有一组类似于下面的连续天:

ID,DATE,PERIOD

101,01jan2014,1

101,02jan2014,1

101,03jan2014,1

101,07jan2014,2

101,08jan2014,2

101,10jan2014,3

101,12jan2014,4

101,13jan2014,4

102,08jan2014,1

102,09jan2014,1

102,10jan2014,1

102,15jan2014,2

【问题讨论】:

    标签: sql gaps-and-islands greenplum


    【解决方案1】:

    您可以使用row_number() 执行此操作。对于连续组,日期和row_number() 之间的差异是一个常数。然后,使用dense_rank() 分配句点:

    select id, date,
           dense_rank() over (partition by id order by grp) as period
    from (select t.*,
                 date - row_number() over (partition by id order by date) * 'interval 1 day'
          from table t
         ) t
    

    【讨论】:

    • 感谢您的回复。但是我在日期上遇到错误 - 行号
    • @user3694537 。 . .我认为 Greenplum 的语法现在是正确的。
    猜你喜欢
    • 1970-01-01
    • 2022-01-08
    • 2022-07-19
    • 2017-04-20
    • 1970-01-01
    • 2017-06-02
    • 1970-01-01
    • 2018-12-01
    • 2017-08-17
    相关资源
    最近更新 更多