나는 MS SQL Server에서 아래와 유사한 테이블을 가지고 있습니다.최소 및 최대 ID 및 그룹 및 기타 조건보다
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 = 0 일 때 id로 그룹화하고 최소 및 최대 시간에 대한 datediff를 수행하는 것입니다. 하지만 그것은 id 1이 8 시간 (12:00 - 4:00) @ 12:00 동안 오프라인이라고 말한 결과를 나에게 줄 것입니다. 정말 원할 때 다음 결과 집합을 제공하는 쿼리가 필요합니다.
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 서버, 오라클? – Taryn
@bluefeet 대괄호 대괄호 == SQL Server –
@JoachimIsaksson 동의하지만 그들은 사용하는 rdbms를 명시해야합니다. – Taryn