如何按小时或按 10 分钟分组时间?

新手上路,请多包涵

就像我做的那样

SELECT [Date]
  FROM [FRIIB].[dbo].[ArchiveAnalog]
  GROUP BY [Date]

如何指定组期间?我正在使用 MS SQL 2008。

我已经试过了,都用 % 10/ 10

 SELECT MIN([Date]) AS RecT, AVG(Value)
  FROM [FRIIB].[dbo].[ArchiveAnalog]
  GROUP BY (DATEPART(MINUTE, [Date]) / 10)
  ORDER BY RecT

是否可以在没有毫秒的情况下进行 Date 输出?

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

阅读 787
2 个回答

终于完成了

GROUP BY
DATEPART(YEAR, DT.[Date]),
DATEPART(MONTH, DT.[Date]),
DATEPART(DAY, DT.[Date]),
DATEPART(HOUR, DT.[Date]),
(DATEPART(MINUTE, DT.[Date]) / 10)

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

这是一个选项,可提供该间隔(7:30、7:40 等)的人类可读开始时间。

在临时表中,它使用 SMALLDATETIME 截断秒和毫秒,然后主查询减去所需分钟间隔内的任何数量。

 SELECT DATEADD(MINUTE, -(DATEDIFF(MINUTE, '2000', tmp.dt) % 10), tmp.dt)
FROM (
    SELECT CAST(DateField AS SMALLDATETIME) AS dt
    FROM MyDataTable
) tmp

它也可以在一行代码中完成,但它不那么可读。

 SELECT DATEADD(MINUTE, -(DATEDIFF(MINUTE, '2000', CAST(DateField AS SMALLDATETIME)) % 10), CAST(DateField AS SMALLDATETIME)) AS [interval] FROM MyDataTable

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

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