MS SQL Server に以下のようなテーブルがあります。
id | Timestamp | active
-----+-----------+--------
1 | 1:00 | 1
1 | 2:00 | 1
1 | 3:00 | 1
1 | 4:00 | 0
1 | 5:00 | 0
1 | 6:00 | 1
1 | 7:00 | 0
1 | 8:00 | 0
1 | 9:00 | 0
1 | 10:00 | 1
1 | 11:00 | 1
1 | 12:00 | 0
1 | 13:00 | 1
2 | 2:00 | 1
2 | 3:00 | 1
2 | 4:00 | 0
2 | 5:00 | 0
3 | 8:00 | 0
3 | 9:00 | 0
4 | 1:00 | 1
4 | 2:00 | 1
5 | 16:00 | 0
私がしたいことは、各IDがいつ非アクティブ(アクティブ= 0)であったかを調べることです。私がやろうとしたのは、アクティブ = 0 のときに ID でグループ化し、最小時間と最大時間で datediff を実行することでした。しかし、それは 12:00 で 8 時間 (12:00 - 4:00) オフラインだったという ID 1 の結果を私に与えるでしょう。私が本当に欲しいのは、次の結果セットを提供するクエリです。
id | approx. offline in hours | at time
---+--------------------------+-----------
1 | 1 | 5:00
1 | 2 | 9:00
1 | 0 | 12:00
2 | 1 | 5:00
3 | 0 | 9:00
5 | 0 | 16:00
私が最初に試した間違ったクエリは
SELECT id as [Inactive],
DATEDIFF(hour, MIN(Timestamp), MAX(Timestamp)) as [approx. offline in hours],
MAX(Timestamp) as [at time]
FROM table
WHERE active = 0
GROUP BY [Inactive]
しかし、そのクエリの問題は、アクティブな時間をスキップすることです。PARTITIONを使用して尋ねられ、回答されたこの質問を見てきましたが、質問が十分に異なっており、回答が質問に固有すぎて意味がわかりません。
どんな助けでも大歓迎です。