将 DateTime 分组为 5、15、30 和 60 分钟间隔

新手上路,请多包涵

我正在尝试将一些记录分组为 5 分钟、15 分钟、30 分钟和 60 分钟的间隔:

 SELECT AVG(value) as "AvgValue",
sample_date/(5*60) as "TimeFive"
FROM DATA
WHERE id = 123 AND sample_date >= 3/21/2012

我想运行几个查询,每个查询都会将我的平均值分组到所需的时间增量中。所以 5 分钟的查询将返回如下结果:

 AvgValue  TimeFive
6.90      1995-01-01 00:05:00
7.15      1995-01-01 00:10:00
8.25      1995-01-01 00:15:00

30 分钟的查询将导致:

 AvgValue  TimeThirty
6.95      1995-01-01 00:30:00
7.40      1995-01-01 01:00:00

datetime 列采用 yyyy-mm-dd hh:mm:ss 格式

我的 datetime 列出现隐式转换错误。任何帮助深表感谢!

原文由 jrubengb 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
1 个回答

在新的 SQL Server 2022 中, 您可以使用 DATE_BUCKET ,这会将其向下舍入到指定的最接近的间隔。

 SELECT
  DATE_BUCKET(minute, 5, d.sample_date) AS TimeFive,
  AVG(d.value) AS AvgValue
FROM DATA d
WHERE d.id = 123
  AND d.sample_date >= '20121203'
GROUP BY
  DATE_BUCKET(minute, 5, d.sample_date);

原文由 Charlieface 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进