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在日期2020-01-25,2020-01-26,2020-01-27购买(Step = p)
我需要下次购买日期,其中step = p表示第二行的值为2020-01-26,第三行的值为2020-01-27,第六行的值为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
答案 0 :(得分:0)
您可以使用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;