标记连续天数
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 的语法现在是正确的。以上是关于标记连续天数的主要内容,如果未能解决你的问题,请参考以下文章