私はMS SQL Serverで以下のようなテーブルを持っています。私は、各IDはどのくらいのために(0 =アクティブ)不活性であった時に見つける何をしたいのかグループごとの最小値と最大値とその他の条件
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のときにidをグループ化し、最小時間と最大時間のdatediffを実行することでした。しかし、それは8時間(12:00〜4:00)@ 12: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]
である。しかし、そのクエリでの問題は、それが間にアクティブな時間をスキップしていることです。私はTHISの質問にPARTITIONを使って尋ねられた質問を見てきましたが、問題が十分に異なっているように見えます。
何か助けていただければ幸いです。
どのようなrdbmsを使用していますか? SQL Server、oracle? – Taryn
@bluefeet大括弧は大体== SQL Server –
@JoachimIsaksson私は同意しますが、彼らは使用しているrdbmsを述べるべきです。 – Taryn