标记连续天数

Posted

技术标签:

【中文标题】标记连续天数【英文标题】: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

【问题讨论】:

【参考方案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 的语法现在是正确的。

以上是关于标记连续天数的主要内容,如果未能解决你的问题,请参考以下文章

SQL:连续天数的计算方法

获取连续登陆天数,连续签到天数 ,方法优化

查找超过指定天数的任何人的最大连续缺勤天数

mysql查询连续天数数据

计算温度低于 0 的连续天数

spark sql 连续登录最大天数