我目前正在進行SQL查詢以訪問名爲「警報」的表中的數據。此表被設置爲按以下格式:SQL Server,將2行合併爲1並限制行分組
AlarmNumber | Time | AlarmState -------------|-------|----------- 1046 | 10:30 | 0 1045 | 10:25 | 1 1044 | 10:24 | 0 1046 | 10:24 | 1 1046 | 10:23 | 0 1046 | 10:22 | 1
我想達成什麼是警報分爲以下格式進行排序 的目的是顯示報警起始時間,報警停機時間和報警有效時間(警報結束時間 - 告警開始時間)
AlarmNumber | AlarmStartTime | AlarmEndTime | AlarmActiveTime -------------|-----------------|--------------|---------------- 1046 | 10:24 | 10:30 | 00:02 1045 | 10:24 | - | 10:24 + Current Time 1044 | Shift Start Time| 10:30 |10:30 - Shift Start Time 1046 | 10:22 | 10:23 | 00:01
我當前的代碼如下(注:_Global_Vars是時區表):
SELECT
TODATETIMEOFFSET([ALARM_START_TIME],0) AT TIME ZONE (SELECT g.LocalTimeZone FROM _Global_Vars as g) AS [ALARM_START_TIME],
TODATETIMEOFFSET(ALARM_FINISH_TIME,0) AT TIME ZONE (SELECT g.LocalTimeZone FROM _Global_Vars as g) AS [ALARM_FINISH_TIME],
DATEDIFF(SS, [ALARM_START_TIME], [ALARM_FINISH_TIME]),
sub.AlarmNumber
FROM
(
SELECT
(a.[Time]) AS AlarmTime,
(a.[AlarmNumber]+1) as AlarmNumber,
(CASE WHEN a.[AlarmState] = 1 THEN a.[Time] END) [ALARM_START_TIME],
(CASE WHEN a.[AlarmState] = 0 THEN a.[Time] END) [ALARM_FINISH_TIME]
FROM [Alarms] as a
WHERE (a.[Time] > DATEADD(mi, - 60.0 * 12, GETUTCDATE()))
)`
目前最大的問題是,如果我在CASE
和GROUP BY AlarmNumber
前使用MAX
,它結合了所有的報警編號值的成單排,我想它如果發生報警有報警編號的多個實例多次
我是一個編寫SQL查詢的新手,所以任何幫助都會很棒。
你沒有解釋'alarmstate' –
'Alarmstate'在原有報警表列中包含一個1或0取決於如果報警處於活動狀態。我正在使用它將每個'alarmnumber'的時間分隔爲'AlarmStartTime'和'AlarmEndTime' – Trav