(PostgreSQL 8.4)我對SQL間隙和島嶼進行了很好的介紹here on Stack Overflow但我仍然有一個問題。許多島嶼檢測CTE基於時間戳的運行順序和一些標誌,當它改變時會中斷順序。但是如果「休息」情況稍微複雜一點呢?在多個參數和條件下檢測SQL島
CREATE TABLE T1
(
id SERIAL PRIMARY KEY,
val INT, -- some device
status INT -- 0=OFF, 1=ON
);
INSERT INTO T1 (val, status) VALUES (10, 1);
INSERT INTO T1 (val, status) VALUES (10, 0);
INSERT INTO T1 (val, status) VALUES (11, 1);
INSERT INTO T1 (val, status) VALUES (11, 1);
INSERT INTO T1 (val, status) VALUES (10, 0);
INSERT INTO T1 (val, status) VALUES (12, 1);
INSERT INTO T1 (val, status) VALUES (13, 1);
INSERT INTO T1 (val, status) VALUES (13, 0);
INSERT INTO T1 (val, status) VALUES (13, 1);
在這種情況下,val
表示的裝置,並且status
要麼ON
或OFF
。我想用以下邏輯選擇記錄1
,3
,6
,7
和9
。
10接通 - OK,新的序列,包括在SELECT
10熄滅 - 正常結束序列,忽略行
11接通 - OK,新的序列,包括在SELECT
11接通 - 複製,忽略行
10熄滅 - #10是不是ON,忽視
12變爲ON - 確定,隱式斷開#11,包括在SELECT
13變爲ON - 確定,隱式斷開#12,包括在SELECT
13斷開 - 結束序列正確,忽略行
13開啓 - OK,新的序列,包括在SELECT
Basicall Y,只有一個設備可以在一個時間是ON,而 「打破」 的條件是:
- new.val = running.val AND new.status = 0
- new.val <>運行。 VAL和new.status = 1
我正在尋找在CTE的形式的東西,不光標請。
給你想要的行,即第一個條件就是噪音。你根本不會對'OFF'行感興趣。 –
增加了兩個額外的行(8,9)以及解釋。 – Jeff