Здравствуйте.
Можно получить выборку последовательным выполнением трёх запросов для временных общих табличных выражений с использованием оконных функций выбора предыдущего/последующего значений LAG и LEAD:
- выделение переходов значений value с фильтрацией по идентификатору переменной id и, возможно, по интервалу времени для timestamp. Поиск начинается с перехода 0->1, для первой строки в качестве предыдущего значения выбирается 0:
SELECT id,timestamp AS time1,value AS value1,LAG(value,1,0) OVER() AS value2 FROM trends_data WHERE id=1;
- формирование временных интервалов для значений value=1 и value=0:
WITH ttemp1 AS (SELECT id,timestamp AS time1,value AS value1,LAG(value,1,0) OVER() AS value2 FROM trends_data WHERE id=1) SELECT id,time1,LEAD(time1,1,' ещё не завершен') OVER() AS time2,value1,value2 FROM ttemp1 WHERE value1<>value2;
- прореживание интервалов только для значений value=1:
WITH ttemp2 AS (WITH ttemp1 AS (SELECT id,timestamp AS time1,value AS value1,LAG(value,1,0) OVER() AS value2 FROM trends_data WHERE id=1) SELECT id,time1,LEAD(time1,1,' ещё не завершен') OVER() AS time2,value1,value2 FROM ttemp1 WHERE value1<>value2) SELECT * FROM ttemp2 WHERE value1=1;