您如何找到客户的平均日期?

时间:2014-04-07 18:50:22

标签: sql

我有以下数据:

CustomerID OrderDate
1          2011-02-16 
1          2011-04-20 
2          2011-04-25 
2          2011-10-24 
2          2011-11-14

如何找到每位客户的平均DATEDIFF?我想要的结果将是CustomerID以及他们的订单之间的日期平均差异。我非常感谢你的帮助。这让我困了几个月。提前谢谢。

附加说明** 由于我使用的服务器,我无法使用滞后功能。

2 个答案:

答案 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;