我有以下数据:
CustomerID OrderDate
1 2011-02-16
1 2011-04-20
2 2011-04-25
2 2011-10-24
2 2011-11-14
如何找到每位客户的平均DATEDIFF?我想要的结果将是CustomerID以及他们的订单之间的日期平均差异。我非常感谢你的帮助。这让我困了几个月。提前谢谢。
附加说明** 由于我使用的服务器,我无法使用滞后功能。
答案 0 :(得分:2)
在SQLServer 2012中,您可以对将Binaya Regmi的查询更改为
的延迟进行分区with cte as (
SELECT CustomerID, OrderDate,
LAG(OrderDate) OVER (PARTITION BY CustomerID
ORDER BY CustomerID, OrderDate) AS PrevDate
FROM T)
Select customerid, avg(datediff(d, prevdate, orderdate)) average
From cte
Group By customerid
一个非优化的查询,但主要使用标准的sql(因为请求者没有说明他的RDBMS)是
SELECT customerid, avg(datediff(d,prevdate, OrderDate)) average
FROM (SELECT ext.customerid, ext.OrderDate, max(prevdate) prevdate
FROM orders ext
INNER JOIN (SELECT customerid, orderdate prevdate
FROM orders) sub
ON ext.customerid = sub.customerid
AND ext.OrderDate > sub.prevdate
GROUP BY ext.customerid, orderdate) a
GROUP BY customerid
答案 1 :(得分:1)
假设T
是您的表,并且您想要day
中日期的平均差异,以下是SQL Server 2012中的代码:
with cte as (
SELECT CustomerID, OrderDate,
LAG(OrderDate) OVER (PARTITION BY CustomerID
ORDER BY CustomerID, OrderDate) AS PrevDate
FROM T)
select customerid, avg(datediff(d, prevdate, orderdate )) as AvgDay
from cte group by customerid;