我有一組數據,告訴我是否有幾個系統可用或不是每增加5或15分鐘。現在,時間增量應該不重要。查找連續行和計算持續時間
的數據是這樣的:
Status Time System_ID
T 10:00 S01
T 10:15 S01
F 10:30 S01
F 10:45 S01
F 11:00 S01
T 11:15 S01
T 11:30 S01
F 11:45 S01
F 12:00 S01
F 12:15 S01
T 12:30 S01
F 10:00 S02
F 10:15 S02
F 10:30 S02
F 10:45 S02
F 11:00 S02
T 11:15 S02
T 11:30 S02
我想創建告訴視圖當系統不可用(即當它是F),從什麼時候開始,到什麼時間,以及持續時間是 - 從。
期望的結果:
System_ID From To Duration
S01 10:30 11:00 00:30
S01 11:45 12:15 00:30
S02 10:00 11:00 01:00
這裏是腳本數據:
DROP SCHEMA IF EXISTS Sys_data CASCADE;
CREATE SCHEMA Sys_data;
CREATE TABLE test_data (
status BOOLEAN,
dTime TIME,
sys_ID VARCHAR(10),
PRIMARY KEY (dTime, sys_ID)
);
INSERT INTO test_data (status, dTime, sys_ID) VALUES (TRUE, '10:00:00', 'S01');
INSERT INTO test_data (status, dTime, sys_ID) VALUES (TRUE, '10:15:00', 'S01');
INSERT INTO test_data (status, dTime, sys_ID) VALUES (FALSE, '10:30:00', 'S01');
INSERT INTO test_data (status, dTime, sys_ID) VALUES (FALSE, '10:45:00', 'S01');
INSERT INTO test_data (status, dTime, sys_ID) VALUES (FALSE, '11:00:00', 'S01');
INSERT INTO test_data (status, dTime, sys_ID) VALUES (TRUE, '11:15:00', 'S01');
INSERT INTO test_data (status, dTime, sys_ID) VALUES (TRUE, '11:30:00', 'S01');
INSERT INTO test_data (status, dTime, sys_ID) VALUES (FALSE, '11:45:00', 'S01');
INSERT INTO test_data (status, dTime, sys_ID) VALUES (FALSE, '12:00:00', 'S01');
INSERT INTO test_data (status, dTime, sys_ID) VALUES (FALSE, '12:15:00', 'S01');
INSERT INTO test_data (status, dTime, sys_ID) VALUES (TRUE, '12:30:00', 'S01');
INSERT INTO test_data (status, dTime, sys_ID) VALUES (FALSE, '10:00:00', 'S02');
INSERT INTO test_data (status, dTime, sys_ID) VALUES (FALSE, '10:15:00', 'S02');
INSERT INTO test_data (status, dTime, sys_ID) VALUES (FALSE, '10:30:00', 'S02');
INSERT INTO test_data (status, dTime, sys_ID) VALUES (FALSE, '10:45:00', 'S02');
INSERT INTO test_data (status, dTime, sys_ID) VALUES (FALSE, '11:00:00', 'S02');
INSERT INTO test_data (status, dTime, sys_ID) VALUES (TRUE, '11:15:00', 'S02');
INSERT INTO test_data (status, dTime, sys_ID) VALUES (TRUE, '11:30:00', 'S02');
預先感謝您!
不會你想查詢從T後的第一個F到下一個T?該系統不一定在序列中的最後一個F和下一個T之間可用。 – 2010-04-19 08:11:45
您是對的。它應該是下一個T. – MannyKo 2010-04-19 09:17:21