繁体   English   中英

标记连续的日子

[英]Tagging consecutive days

大概我有这样的数据:

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

您可以使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM