【发布时间】:2020-04-19 23:07:36
【问题描述】:
我正在尝试根据行差异
select hotel.*,
IFNULL(datediff(visit_date, lag(visit_date)
OVER (partition by hotel_id)), 0) as diff
from hotel;
我得到以下输出,
hotel_id customer_id visit_date diff
1 1 2020-01-01 0
1 2 2020-01-03 2
2 1 2020-01-01 0
2 2 2020-01-10 9
2 3 2020-01-14 4
3 1 2020-01-04 0
3 1 2020-01-11 7
我被 RANK() 部分卡住了。
预期输出: 如果 Day Difference 小于 3,则为 1,否则为 2。如果下一个大于 3 天,则为 3,依此类推
hotel_id customer_id visit_date rank
1 1 2020-01-01 1
1 2 2020-01-03 1
2 1 2020-01-01 1
2 2 2020-01-10 2
2 3 2020-01-14 3
3 1 2020-01-04 1
3 1 2020-01-11 2
【问题讨论】:
-
您说“如果日差小于 3,则为 1,否则为 2”,但表中的最后一个条目为
rank = 3,这是如何工作的? -
@Nick 这是我的 SQL。还有,是的!如果日差小于 3,则为 1,否则为 2、3、4,依此类推。只有当日差不小于 3 时,排名才会增加
-
那么如果 diff 回落到
-
@Nick 当 rank = 3,并且下一个 customer_id 天差
标签: mysql sql mysql-workbench