按7天间隔分组postgresql
我知道这是一个常见的问题,但我找不到符合我的情况的东西。我有以下数据:按7天间隔分组postgresql,sql,postgresql,date,group-by,intervals,Sql,Postgresql,Date,Group By,Intervals,我知道这是一个常见的问题,但我找不到符合我的情况的东西。我有以下数据: id | obs ----+------------ 1 | 2018-01-01 2 | 2018-01-02 3 | 2018-01-03 4 | 2018-01-04 5 | 2018-01-05 6 | 2018-01-06 7 | 2018-01-07 8 | 2018-01-15 9 | 2018-01-20 10 | 2018-02-03 11 | 2
id | obs
----+------------
1 | 2018-01-01
2 | 2018-01-02
3 | 2018-01-03
4 | 2018-01-04
5 | 2018-01-05
6 | 2018-01-06
7 | 2018-01-07
8 | 2018-01-15
9 | 2018-01-20
10 | 2018-02-03
11 | 2018-02-04
12 | 2018-02-05
13 | 2018-02-06
14 | 2018-02-06
我希望这些数据以7天为间隔进行分组。也就是说,这些小组将是:
第1组:id 1至7
第2组:id 8和id 9
第3组:id 10至14
这个查询在PostgreSQL中是如何实现的
提前感谢我将按照以下步骤进行: 首先,使用子查询将当前记录的日期与序列的最小日期进行比较;日期之间的天数差除以7可以得到记录所属组的第一个版本,但目前组号不一定是连续的 然后,在外部查询中使用稠密_秩将组号重新指定为连续编号: 查询:
SELECT
id,
obs,
DENSE_RANK() OVER(ORDER BY gr) grp
FROM (
SELECT
id,
obs,
MIN(obs) OVER(),
(obs - MIN(obs) OVER())::int/7 + 1 gr
FROM mytable
) x
ODER BY id
)
我将进行以下工作: 首先,使用子查询将当前记录的日期与序列的最小日期进行比较;日期之间的天数差除以7可以得到记录所属组的第一个版本,但目前组号不一定是连续的 然后,在外部查询中使用稠密_秩将组号重新指定为连续编号: 查询:
SELECT
id,
obs,
DENSE_RANK() OVER(ORDER BY gr) grp
FROM (
SELECT
id,
obs,
MIN(obs) OVER(),
(obs - MIN(obs) OVER())::int/7 + 1 gr
FROM mytable
) x
ODER BY id
)
如果要根据七天的间隔对事物进行分组,请使用滞后和累积总和来定义组:
select t.*,
count(*) filter (where prev_obs is null or prev_obs < obs - interval '7 day') over (order by obs) as grp
from (select t.*,
lag(obs) over (order by obs) as prev_obs
from t
) t
如果要根据七天的间隔对事物进行分组,请使用滞后和累积总和来定义组:
select t.*,
count(*) filter (where prev_obs is null or prev_obs < obs - interval '7 day') over (order by obs) as grp
from (select t.*,
lag(obs) over (order by obs) as prev_obs
from t
) t
请定义7天间隔。请定义7天间隔。@Fabi_Z。你不接受这个答案有什么原因吗?@Fabi_Z。你不接受这个答案有什么原因吗?