sql - 多个日期之间的平均时间
问题描述
假设我们有以下信息:
**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 个订单的订单,因此无需担心与空值进行比较。
解决方案
你不需要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。
推荐阅读
- php - 在 Symfony 3.4 中找不到模板错误
- python - 为什么我不能在 heroku 上部署 react flask 应用程序?
- slack-api - 如何更改 Slack 中的模态图标?
- python - 在 pandas 数据框中查找事件的每个 id 的连续天数
- javascript - 在 useState 中更新 Map 时避免重新渲染组件
- git - 完成 git reset 后如何继续
(卡住) - javascript - 根据另一个下拉列表动态更新下拉列表?
- javascript - 如何将 Vue.js 集成添加到已初始化的 Sentry.io 设置中?
- reactjs - Google Recaptcha 问题
- linux - 需要建议在 linux 中移动一个大的实时文件