2015-06-27 19 views
1

我正在努力寻找SQL Server中客户级别上两个日期之间平均耗用天数的方法。客户级别的两个日期之间的平均耗用天数

SELECT 
CUSTOMER, 
VISIT_ID, 
DAYIN_DATE, 
DAYOUT_DATE, 
RANK() OVER (PARTITION BY CUSTOMER ORDER BY VISIT_ID DESC) AS RANKING, 
LAG(DAYOUT_DATE, 1) 
OVER (PARTITION BY CUSTOMER ORDER BY VISIT_ID DESC) AS DATEOUT_DT, 
LEAD(DAYIN_DATE, 1) 
OVER (PARTITION BY CUSTOMER ORDER BY VISIT_ID DESC) AS DATEIN_DT, 
(DATEIN_DT - DATEOUT_DT) AS LATENCY 
FROM VISIT_TABLE 
GROUP BY 1,2,3,4; 

此代码以客户和访问(唯一ID),然后由DAYIN_DATE/DAYOUT_DATE排列。我已经编写了延迟和主导函数来帮助计算延迟,但是平均而言,它在客户级别上不是平均值。

我错过了什么?

结果:

CUSTOMER VISIT_ID CHECKIN_DATE CHECKOUT_DATE RANKING CHECKIN_DT CHECKOUT_DT LATENCY 
999999999 1111111111 4/27/2015 4/28/2015 1 8/20/2014 (null) (null) 
999999999 2222222222 8/20/2014 8/21/2014 2 8/19/2014 4/28/2015 252 
999999999 3333333333 8/19/2014 8/20/2014 3 8/18/2014 8/21/2014 3 
999999999 4444444444 8/18/2014 8/19/2014 4 8/17/2014 8/20/2014 3 
999999999 5555555555 8/17/2014 8/18/2014 5 7/4/2014 8/19/2014 46 
999999999 6666666666 7/4/2014 7/6/2014 6 4/15/2014 8/18/2014 125 

期望的结果:

CUSTOMER_ID AVGLATENCY_PER_CUST 
999999999 17 
888888888 12
+0

请提供采样数据和期望的结果。 –

回答

1

没有指定的表是如何建立这样根据您尝试,我相信这个表有客户,VISIT_ID, DATEIN_DT,DATEOUT_DT。

如果DATEIN_DT和DATEOUT_DT是日期,您可以使用average和datediff函数,然后按客户端进行分组。

实施例:

SELECT 
    CLIENT, 
    AVG(DATEDIFF(dd,DATEIN_DT,DATEOUT_DT)) AverageVisitTime 
    FROM VISIT_TABLE 
    GROUP BY CLIENT