如何使用SQL按任意时间段进行分组

时间:2013-01-17 17:50:04

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

这与我之前的question相似但不相等 那是关于如何每天汇总日志项目。 我使用这个SQL。

SELECT 
  [DateLog] = CONVERT(DATE, LogDate), 
  [Sum] = COUNT(*)
FROM PerfRow
GROUP BY CONVERT(DATE, LogDate)
ORDER BY [DateLog];

现在我想改进这一点,总结一下仲裁时间段。 因此,而不是每天的总和,每小时或5分钟的总和。 这可能吗?

我使用SQL Server 2008 R2

1 个答案:

答案 0 :(得分:2)

您可以使用DATEADD和DATEPART对LogDate进行舍入,然后将其分组。

示例(按五秒间隔分组):

SELECT 
  [DateLog] = DATEADD(ms,((DATEPART(ss, LogDate)/5)*5000)-(DATEPART(ss, LogDate)*1000)-DATEPART(ms, LogDate), LogDate), 
  [Sum] = COUNT(*)
FROM 
(
    SELECT LogDate = '2013-01-01 00:00:00' UNION ALL
    SELECT LogDate = '2013-01-01 00:00:04' UNION ALL
    SELECT LogDate = '2013-01-01 00:00:06' UNION ALL
    SELECT LogDate = '2013-01-01 00:00:08' UNION ALL
    SELECT LogDate = '2013-01-01 00:00:10'
) a
GROUP BY DATEADD(ms,((DATEPART(ss, LogDate)/5)*5000)-(DATEPART(ss, LogDate)*1000)-DATEPART(ms, LogDate), LogDate)