SQL Server窗口函数用于日期差异

时间:2018-07-20 19:00:08

标签: sql sql-server azure-sql-database

考虑我有这张桌子:

// Orders

OrderId    Customer  OrderDate      
------------------------------
1          Jack      2018/05/01
2          Jack      2018/05/05
3          Jack      2018/05/15
4          Jack      2018/05/18
5          Jack      2018/05/21
6          Alex      2018/06/11
7          Alex      2018/06/12
8          Alex      2018/06/17
9          Alex      2018/06/18

我想要一个查询,以在单个列中显示订单之间的间隔天数,如下所示:

Customer    Gaps             GapAverage
---------------------------------------
Jack        4, 10, 3, 3      5
Alex        1, 5, 3          3

因此,对于杰克,他的 2nd 订单在他的 1st 订单后 4天,他的 3rd 是<在他的第二次命令之后,强> 10天,并且... 他的平均差距是5天。

如何编写查询以在SQL Server中实现这种结果?

1 个答案:

答案 0 :(得分:3)

我收到了这样的查询

select q1.Customer, 
       STRING_AGG(q1.diff, ',') as Gaps, 
       AVG(diff) as GapAverage
from ( select Customer as Customer, 
       DATEDIFF(dd, [OrderDate], LEAD([OrderDate]) OVER (PARTITION  BY Customer ORDER  BY Customer)) as diff
       from OrderT) as q1
group by q1.Customer

我正在使用LEAD函数来访问当前行之后的行。使用此函数的OVER参数,我将结果按“客户”字段分为几组。使用功能DATEDIFF,我可以在几天之内得到差距。