0 sql postgresql gaps-and-islands
我目前正在研究postgres,下面是我的问题.
我们有一个客户ID以及该人访问房产的日期.基于此,我需要计算出行次数.连续日期被视为一次旅行.例如:如果一个人在第一次约会时访问该行程不是第一次,那么他会连续三天访问,这将被视为行程二.
以下是输入
ID Date
1 1-Jan
1 2-Jan
1 5-Jan
1 1-Jul
2 1-Jan
2 2-Feb
2 5-Feb
2 6-Feb
2 7-Feb
2 12-Feb
Run Code Online (Sandbox Code Playgroud)
预期产出
ID Date Trip no
1 1-Jan 1
1 2-Jan 1
1 5-Jan 2
1 1-Jul 3
2 1-Jan 1
2 2-Feb 2
2 5-Feb 3
2 6-Feb 3
2 7-Feb 3
2 12-Feb 4
Run Code Online (Sandbox Code Playgroud)
我能够成功地使用循环实现,但考虑到数据量,它的运行速度非常慢.
你能否建议我们不能使用循环的解决方法.
从日期中减去一个序列 - 这些对于特定的旅行将是恒定的.然后你可以dense_rank()用于编号:
select t.*,
dense_rank() over (partition by id order by grp) as trip_num
from (select t.*,
(date - row_number() over (partition by id order by date) * interval '1 day'
) as grp
from t
) t;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |