多个日期之间的平均时间

时间:2018-08-14 09:13:37

标签: sql sql-server sql-server-2008-r2

说我们有以下信息:

**ref_no, customer, dt_created**
SO2553009, CN01806740, 2015-08-20 11:10:51.770
SO2553264, CN01806740, 2015-08-20 14:40:05.260
WW101120264, CN01806740, 2015-08-19 21:55:32.990

这是一个客户的3个订单,代表一个典型的帐户资料。

我需要计算3 *日期时间字段之间的平均时间,以天为单位(使用datediff?),因为请求信息的部门希望知道订单之间的平均时间。

如果这无法在SQL中完成,我将尝试弄乱SSRS中的信息,但是“正在运行的报告”已经具有多个数据集,因此我想在SQL中完成大部分工作以改善用户体验

这是SQL 2008 R2,所以我知道像LEAD和ROW_NUMBER这样的高级功能不可用,因为我在其他询问类似问题的线程中发现了它们。

  • 这不是固定数字。可以有任意数量的订单,尽管整个查询只会查看数量大于1的订单,因此无需担心与空值进行比较。

2 个答案:

答案 0 :(得分:2)

SELECT  T1.customer, AVG (CA.delta) as av_gap FROM 
(
SELECT T1.ref_no, T1.customer, T1.dt_created, CA.dt_created , DATEDIFF(day,T1.dt_created,CA.dt_created) as delta  FROM YourTable T1
CROSS APPLY (SELECT TOP 1 T2.dt_created FROM YourTable T2 WHERE T2.dt_created > T1.dt_created AND T1.customer = T2.customer ORDER BY T2.dt_created ASC ) CA
) IQ
GROUP BY IQ.T1.customer

如果您在table1日期

答案 1 :(得分:1)

您不需要lead()。只需使用max()min()

select customer,
       datediff(hour, min(dt_created), max(dt_created)) / nullif(count(*) - 1, 0) as avg_diff_hours
from t
group by customer;

订单之间的平均时间是最大和最小时间之差除以计数所得的一分之一。

要获得天数,可以除以24。