sql - 购买客户的下一个日期
问题描述
ID Date Zone Group destination start end sec step unit
1 2020-01-25 Zone1 GP1 D1 2020-01-25 08:18 2020-01-25 08:22 240 E 18
1 2020-01-25 Zone3 GP3 D1 2020-01-25 14:18 2020-01-25 14:22 198 P 50
1 2020-01-26 Zone3 GP3 D1 2020-01-26 14:18 2020-01-26 14:22 298 P 50
1 2020-01-27 Zone4 GP4 D1 2020-01-27 20:04 2020-01-27 20:09 283 D 55
1 2020-01-27 Zone3 GP3 D1 2020-01-27 08:18 2020-01-27 08:22 740 E 22
1 2020-01-27 Zone4 GP4 D1 2020-01-27 10:43 2020-01-27 10:57 853 p 289
2 2020-03-13 Zone1 GP1 D1 2020-03-13 08:08 2020-03-13 08:11 201 N 555
2 2020-03-13 Zone2 Gp2 D1 2020-03-13 06:27 2020-03-13 06:40 767 E 789
2 2020-03-13 Zone3 GP3 D1 2020-03-13 21:02 2020-03-13 21:09 409 P 552
2 2020-03-15 Zone4 GP4 D1 2020-03-15 21:09 2020-03-15 21:10 78 P 253
这里我需要客户下一次购买日期请看下面的输出,客户 1 购买(步骤 = p)的日期是 2020-01-25,2020-01-26,2020-01-27
我需要下一次购买日期,其中步骤 = p 这意味着第二行的值为 2020-01-26,第 3 行的值为 2020-01-27,第 6 行的值应为 NULL,因为在 2020-01-27 日期之后没有购买。
输出
ID Date Zone Group destination start end sec step unit NextPurchase_date
1 2020-01-25 Zone1 GP1 D1 2020-01-25 08:18 2020-01-25 08:22 240 E 18 NULL
1 2020-01-25 Zone3 GP3 D1 2020-01-25 14:18 2020-01-25 14:22 98 P 50 2020-01-06
1 2020-01-26 Zone3 GP3 D1 2020-01-26 14:18 2020-01-26 14:22 298 P 50 2020-01-27
1 2020-01-27 Zone4 GP4 D1 2020-01-27 20:04 2020-01-27 20:09 283 D 55 NULL
1 2020-01-27 Zone3 GP3 D1 2020-01-27 08:18 2020-01-27 08:22 740 E 22 NULL
1 2020-01-27 Zone4 GP4 D1 2020-01-27 10:43 2020-01-27 10:57 853 p 289 NULL
2 2020-03-13 Zone1 GP1 D1 2020-03-13 08:08 2020-03-13 08:11 201 N 555 NULL
2 2020-03-13 Zone2 Gp2 D1 2020-03-13 06:27 2020-03-13 06:40 767 E 789 NULL
2 2020-03-13 Zone3 GP3 D1 2020-03-13 21:02 2020-03-13 21:09 409 P 552 2020-03-15
2 2020-03-15 Zone4 GP4 D1 2020-03-15 21:09 2020-03-15 21:10 78 P 253 NULL
解决方案
您可以使用lead()
:
select t.*,
(case when step = 'P'
then convert(date, lead(start) over (partition by id, step order by start))
end) as next_purchase_date
from t;
推荐阅读
- ios - VIPER 实体和存储它们的位置
- microsoft-graph-api - 尝试使用图形 api 调用创建事件,其中 isOnlineMeeting false for MS Teams
- ios - TableViewCell 数据传输但数据迟到 iOS
- java - 服务器返回 HTTP 响应代码:带有 Dropbox API 的 URL 为 400
- javascript - 我的网页在同一浏览器中具有不同的视图,但另一台计算机具有相同的英寸
- javascript - Javacsript/CSS 在 Safari 中无法正常工作?
- reactjs - 当 yaxis 中的数据数量不等于 xaxis 中的数据数量时,在 Chartjs 2 中绘制折线图
- gitlab-ci - Gitlab 仅在上一个作业运行时才运行管道作业
- c++ - 通用特征矩阵/向量对象传输到自定义矩阵/向量容器
- javascript - 如何在反应无状态组件中的onMouseEnter div时更改图像src