我现在正在写博士后,下面是我的问题。
我们有一个客户的身份证和那个人参观一处房产的日期。基于此,我需要计算旅行次数。连续的日期被认为是一次旅行。例句:如果一个人在第一天去旅游,旅行号是第一次,那么他要连续三天去旅游,这三天算第二次旅行。
下面是输入
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
预期产量
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
我能够成功地使用loop实现,但是考虑到数据量,它的运行速度非常慢。
你能建议一个我们不能使用循环的解决方法吗。
最佳答案
从日期中减去一个序列——对于一次特定的旅行来说,这些是常数。然后可以使用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;
关于sql - 在不使用循环的情况下计算行程数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52161094/