多个日期之间的平均时间
Average Time Between Multiple Dates
假设我们有以下信息:
**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 中的信息,但 Report this is 运行 已经有多个数据集,所以我最想做的SQL 改善用户体验的工作。
这是 SQL 2008 R2,所以我知道 LEAD 和 ROW_NUMBER 等高级功能不可用,因为我在其他提出类似问题的线程中发现了它们。
- 这不是一个固定的数字。可以有任意数量的订单,尽管整个查询只会查看大于 1 个订单的订单,因此无需担心与空值进行比较。
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 日期 < Table2 日期加入,那么你也可以使用 JOIN,然后 GROUP By 包括 Table1 日期,并取 table 2 日期的 MIN,那么你可以查询子查询,或通过 temp tables 将其压缩为最终结果
您不需要 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。
假设我们有以下信息:
**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 中的信息,但 Report this is 运行 已经有多个数据集,所以我最想做的SQL 改善用户体验的工作。
这是 SQL 2008 R2,所以我知道 LEAD 和 ROW_NUMBER 等高级功能不可用,因为我在其他提出类似问题的线程中发现了它们。
- 这不是一个固定的数字。可以有任意数量的订单,尽管整个查询只会查看大于 1 个订单的订单,因此无需担心与空值进行比较。
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 日期 < Table2 日期加入,那么你也可以使用 JOIN,然后 GROUP By 包括 Table1 日期,并取 table 2 日期的 MIN,那么你可以查询子查询,或通过 temp tables 将其压缩为最终结果
您不需要 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。