考虑我有这张桌子:
// 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中实现这种结果?
答案 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,我可以在几天之内得到差距。