Без джойнов?)
Желательно) Вообще цель - получать периоды в которые машина двигалась, а в какие нет (соответствеено время начала и конца движения)
WITH prev AS ( SELECT time, speed, lagInFrame(speed) OVER (ORDER BY time) AS prev_speed FROM t ) SELECT time, speed, sum(abs(speed - prev_speed)) OVER (ORDER BY time) AS group FROM prev; ┌────────────────time─┬─speed─┬─group─┐ │ 2022-04-06 16:22:44 │ 1 │ 1 │ │ 2022-04-06 16:22:45 │ 1 │ 1 │ │ 2022-04-06 16:22:46 │ 0 │ 2 │ │ 2022-04-06 16:22:47 │ 0 │ 2 │ │ 2022-04-06 16:22:48 │ 0 │ 2 │ │ 2022-04-06 16:22:49 │ 1 │ 3 │ │ 2022-04-06 16:22:50 │ 1 │ 3 │ │ 2022-04-06 16:22:51 │ 1 │ 3 │ │ 2022-04-06 16:22:52 │ 0 │ 4 │ │ 2022-04-06 16:22:53 │ 0 │ 4 │ └─────────────────────┴───────┴───────┘
Тоесть на этом примере идентификатор групп будут 29:15,30:45,32:15,now()
на stack overflow множество примеров в разделе КХ, искать по gaps and islands
на самом деле это надо делать до заливки в КХ. КХ это MPP у вас задача не решается в параллель, надо последовательно строки обрабатывать
Там прикол в том что телематика вразнобой приходит Тут или из бд на уровне запроса это делать, или при обработке постоянно ходить в бд и смотреть нужно ли границы периода раздвигать
ну а зачем вам заливать половину данных в КХ? ну задержите заливку на час в ETL
Данные могут приходить вразнобой вплоть до недели (тут не предскажешь)
ну если часть данных задержалась на неделю как вы доверяете резултатам запросов? Они же по части данных работают?
На неделю - редко, разве что если машина в гараже стояла. В основном в течении дня всё прилетает.
Обсуждают сегодня