SQL запрос с группировкой по сериям одинаковых значений
Помогите, пожалуйста, составить sql запрос (сервер postgresql), если такое вообще возможно.
Упрощенно:
Есть таблица со столбцами: datetime
- дата, condition
- булево
Нужно получить даты начала и окончания серии, когда условие было истинным. Сортировка по дате.
fromDate
- дата, когда condition
первый раз стало true
toDate
- дата, когда condition
последний раз было true
Пример:
Исходная таблица:
| datetime | condition |
| ---------- | --------- |
| 01.01.2024 | false |
| 02.01.2024 | true |
| 15.01.2024 | true |
| 30.01.2024 | true |
| 05.02.2024 | false |
| 15.02.2024 | false |
| 17.02.2024 | true |
| 19.02.2024 | false |
| 01.03.2024 | true |
| 02.03.2024 | true |
| 03.03.2024 | false |
Запрос должен выдать:
|fromDate | toDate |
| --------- | --------- |
| 02.01.2024| 30.01.2024|
| 17.02.2024| 17.02.2024|
| 01.03.2024| 02.03.2024|
Ответы (1 шт):
Автор решения: mitkin
→ Ссылка
select min(datetime) as fromDate, max(datetime) as toDate from (
select datetime, condition, sum((not condition) :: INT) over (order by datetime) as grp from tbl) grps
where condition group by grp
tbl
- исходная таблица