Обнаружение острова SQL по нескольким параметрам и условиям
(PostgreSQL 8.4) Я получил отличное введение в пробелы и острова SQLздесь, на переполнение стека но у меня все еще есть вопрос. Многие CTE обнаружения островов основаны на порядке выполнения временной метки и некоторого флага, который нарушает последовательность при ее изменении. Но что, если "перерыв" состояние немного сложнее?
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
со следующей логикой.
По сути, одновременно может быть включено только одно устройство, иперерыв" Условие таково:
new.val = running.val AND new.status = 0new.val <> running.val AND new.status = 1I 'ищу что-то в форме CTE,нет курсоров, пожалуйста.