Обнаружение острова 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, Я хочу выбрать записи,,,1367 а также9 со следующей логикой.

10 включений - ОК, новая последовательность, включить в SELECT10 выключается - правильно завершает последовательность, игнорирует ряд11 включений - ОК, новая последовательность, включить в SELECT11 включений - дублирование, игнорирование ряда10 выключается - № 10 неt ON, игнорировать12 включений - ОК, неявно выключается # 11, включить в SELECT13 включается - ОК, неявно выключается # 12, включить в SELECT13 выключается - правильно завершает последовательность, игнорирует ряд13 включений - ОК, новая последовательность, включить в SELECT

По сути, одновременно может быть включено только одно устройство, иперерыв" Условие таково:

new.val = running.val AND new.status = 0new.val <> running.val AND new.status = 1I '

ищу что-то в форме CTE,нет курсоров, пожалуйста.

Ответы на вопрос(1)

Ваш ответ на вопрос