SQL Server:按时间间隔分组的结果
问题描述:
我有一个MS SQL Server表,它记录了我们工厂的报警事件,每行报警和日期时间列记录发生报警时的行。SQL Server:按时间间隔分组的结果
我们在12小时内(上午6点到下午6点,下午6点到上午6点)运行我们的工厂,我需要弄清楚我们每班有多少报警。如何将我的结果分组以获得该结果?
原始表看起来是这样的:
DateTime Alarm Name
2010-01-05 14:32:22 Overpressure
2010-01-05 21:32:59 Underspeed
2010-01-06 05:58:13 Underspeed
2010-01-06 06:02:46 Machine Current Fault
而且我们需要组的结果是这样的:
Date Shift Count
2010-01-05 Day 1
2010-01-05 Night 2
2010-01-06 Day 1
注意,如果报警下午6点之间发生的说,1月5和6月1日6点,他们都被视为1月5日的夜班。
有什么建议吗?
答
在此解决方案中,我通过从事件时间减去6小时来计算轮班开始/结束时间。
DECLARE @t TABLE
([DateTime] DATETIME
,[Alarm Name] VARCHAR(30)
)
INSERT @t
SELECT '2010-01-05 14:32:22','Overpressure'
UNION SELECT '2010-01-05 21:32:59','Underspeed'
UNION SELECT '2010-01-06 05:58:13','Underspeed'
UNION SELECT '2010-01-06 06:02:46','Machine Current Fault'
SELECT CONVERT(CHAR(10),DATEADD(hh,-6,[DateTime]),120) AS date
,CASE WHEN DATEPART(hh,DATEADD(hh,-6,[DateTime])) < 12
THEN 'day'
ELSE 'night'
END AS shift
,COUNT(1) AS cnt
FROM @t
GROUP BY CONVERT(CHAR(10),DATEADD(hh,-6,[DateTime]),120)
,CASE WHEN DATEPART(hh,DATEADD(hh,-6,[DateTime])) < 12
THEN 'day'
ELSE 'night'
END
order by 1,2
这是完美的 - 感谢您的帮助 – user246211 2010-01-11 01:19:22