我有下表:
+----------+------------+----------------+
| 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 Server 2012+中新增了允许某种窗口功能的功能?如果可以使用窗口函数完成此操作,那将是一个额外的好处,因为它有望使我的查询更加整洁。
我找不到类似的线程,其中解决方案按另一个类别进行分区(在上面的这种情况下,是客户)
答案 0 :(得分:1)
如果我遵循上一行的叙述和差异,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
要匹配您的“所需”列,我必须改用FIRST_VALUE
。