首页 > 解决方案 > 购买客户的下一个日期

问题描述

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

标签: sqlsql-server

解决方案


您可以使用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;

推荐阅读