如何在postgreSQL中找到日期集群?

时间:2016-12-20 11:27:34

标签: postgresql grouping

我想在表格中找到具有以下结构的日期集群:

patientID  | dt
---------- | ----------
1          | 2016-05-03
1          | 2016-05-05
1          | 2016-05-07
2          | 2016-07-12
2          | 2016-07-15
2          | 2016-07-18
1          | 2016-07-13
1          | 2016-07-14

Per SQL我希望在此群集中从第一个日期开始的7天(或任何其他间隔)内找到日期群集。通常,两个连续簇之间的间隙大于7,因此可以忽略该问题。结果应该是:

patientID  | min(dt)    | max(dt)    | count(dt)
---------- | ---------- | ---------- | ---------
1          | 2016-05-03 | 2016-05-07 | 3
2          | 2016-07-12 | 2016-07-18 | 3
1          | 2016-07-13 | 2016-07-14 | 2

我的第一种方法不起作用,很清楚为什么不(不能按汇总分组),但我不知道如何解决我的问题:

select t0.patientID, min(t0.dt), max(t0.dt), count(*)
from tbl t0 
join tbl t1 on t0.patientID=t1.patientID and t1.dt - t0.dt between 1 and 7
group by t0.patientID, min(t0.dt);

1 个答案:

答案 0 :(得分:0)

这是两个不同的问题。第二个问题 - 查找分隔超过7天的集群 - 是SQL中更容易解决的问题。您可以使用Top-Lvl Manager Salary(agg) T 26 F 13 计算日期之间的差异,从lag()创建一个标记并使用累积总和和汇总来实现此目的:

lag()

您描述的第一个问题需要递归CTE,处理速度会慢得多。