查找与先前记录的日期差异并按类别划分

Finding the the difference in day from previous record and partitioning by category

我有以下 table:

+----------+------------+----------------+
| Customer |    Date    | DesiredDayDiff |
+----------+------------+----------------+
| aaa      | 12/09/2018 |              0 |
| aaa      | 18/09/2018 |              6 |
| aaa      | 25/09/2018 |             13 |
| aaa      | 27/09/2018 |             15 |
| aaa      | 28/09/2018 |             16 |
| bbb      | 07/09/2018 |              0 |
| bbb      | 11/09/2018 |              4 |
| bbb      | 11/09/2018 |              4 |
+----------+------------+----------------+

我需要能够为该特定客户计算与之前记录的天数差异。

我相信 SQL 服务器 2012+ 中有一些附加功能允许某种 window 运行?如果这可以使用 window 函数来完成,这将是一个奖励,因为它有望让我的查询更加整洁。

我找不到解决方案按另一个类别划分的类似讨论帖(在上面的这个例子中,它是客户)

如果我按照你的叙述并与上一行进行区分,LAG 就可以了:

declare @t table (Customer char(3), Date date, DesiredDayDiff int)
insert into @t(Customer,Date,DesiredDayDiff) values
('aaa','20180912',0),
('aaa','20180918',6),
('aaa','20180925',13),
('aaa','20180927',15),
('aaa','20180928',16),
('bbb','20180907',0),
('bbb','20180911',4),
('bbb','20180911',4)

select
    *,
    COALESCE(DATEDIFF(day,LAG(Date) OVER (PARTITION BY Customer ORDER By Date),Date),0)
from
    @t

结果:

Customer Date       DesiredDayDiff 
-------- ---------- -------------- -----------
aaa      2018-09-12 0              0
aaa      2018-09-18 6              6
aaa      2018-09-25 13             7
aaa      2018-09-27 55             2
aaa      2018-09-28 66             1
bbb      2018-09-07 0              0
bbb      2018-09-11 4              4
bbb      2018-09-11 4              0

为了匹配您的 "desired" 列,我必须改用 FIRST_VALUE