Tôi có một bảng tương tự như dưới đây trong MS SQL Server.Tối thiểu và tối đa theo ID trong nhóm và điều kiện khác
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
Điều tôi muốn tìm hiểu khi mỗi ID không hoạt động (active = 0) trong bao lâu. Những gì tôi đã cố gắng làm là nhóm nó theo id khi active = 0, và làm một dateiff vào thời gian min và max. Nhưng điều đó sẽ cho tôi một kết quả cho id 1 cho biết nó đã được diễn ra trong 8 giờ (12:00 - 4:00) @ 12:00. Khi tôi thực sự muốn là một truy vấn sẽ cho tôi tập hợp kết quả sau.
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
Truy vấn sai tôi ban đầu đã cố gắng là
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]
Nhưng vấn đề với truy vấn mà là nó bỏ qua lần kích hoạt ở giữa. Tôi đã xem xét THIS câu hỏi đã được hỏi và trả lời bằng PARTITION, nhưng có vẻ như câu hỏi là đủ khác và câu trả lời quá cụ thể đối với câu hỏi mà tôi không thể hiểu được.
Mọi trợ giúp đều được đánh giá cao.
bạn đang sử dụng rdbms nào? sql-server, oracle? – Taryn
@bluefeet Dấu ngoặc vuông nhiều khả năng == SQL Server –
@JoachimIsaksson Tôi đồng ý nhưng họ nên nêu rõ thứ họ đang sử dụng. – Taryn