我现在正在写博士后,下面是我的问题。
我们有一个客户的身份证和那个人参观一处房产的日期。基于此,我需要计算旅行次数。连续的日期被认为是一次旅行。例句:如果一个人在第一天去旅游,旅行号是第一次,那么他要连续三天去旅游,这三天算第二次旅行。
下面是输入

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/

10-13 00:49