У меня есть данные в таблице, которые показывают, если зажигание true
или false
|--------------------------------------|
| date | ignition |
|---------------------------|----------|
|2019-06-03 10:15:00.000000 | false |
|---------------------------|----------|
|2019-06-03 10:30:00.000000 | false |
|---------------------------|----------|
|2019-06-03 11:30:00.000000 | true |
|---------------------------|----------|
|2019-06-03 11:45:00.000000 | false |
|---------------------------|----------|
|2019-06-03 11:55:00.000000 | false |
|---------------------------|----------|
Я написал SQL-запрос, который показывает состояние зажигания в период даты
SELECT min(date) as date_from, max(date) as date_to, ignition
FROM (SELECT date,
ignition,
row_number() over (order by date) as seqnum,
row_number() over (partition by ignition order by date) as seqnum_s
FROM table_data
WHERE date >= '2019-06-01T21:00:00.000Z' AND date <= '2019-06-09T20:59:59.999Z'
) as raw_data
GROUP BY (seqnum - seqnum_s), ignition
ORDER BY min(date);
Запросрезультат:
|---------------------------|----------------------------|----------|
| date_from | date_to | ignition |
|---------------------------|----------------------------|----------|
|2019-06-03 10:15:00.000000 | 2019-06-03 10:30:00.000000 | false |
|---------------------------|----------------------------|----------|
|2019-06-03 11:30:00.000000 | 2019-06-03 11:30:00.000000 | true |
|---------------------------|----------------------------|----------|
|2019-06-03 11:45:00.000000 | 2019-06-03 11:55:00.000000 | false |
|---------------------------|----------------------------|----------|
Но в результате отсутствует дата от 10:30
до 11:30
и дата от 11:30
до 11:45
.Я должен получить это:
|---------------------------|----------------------------|----------|
| date_from | date_to | ignition |
|---------------------------|----------------------------|----------|
|2019-06-03 10:15:00.000000 | 2019-06-03 11:30:00.000000 | false |
|---------------------------|----------------------------|----------|
|2019-06-03 11:30:00.000000 | 2019-06-03 11:45:00.000000 | true |
|---------------------------|----------------------------|----------|
|2019-06-03 11:45:00.000000 | 2019-06-03 11:55:00.000000 | false |
|---------------------------|----------------------------|----------|
Проблема в том, что во время агрегации в один блок (например, 5 следующих строк false) он смотрит только на последний ряд false, чтобы определить время окончания блока вместо этогопервой следующей строки (первая, которая верна)