RunningDifference(x) для нескольких значений x
Моя таблица tbl_data(event_time, monitor_id, тип,event_date, статус)
select status,sum(runningDifference(event_time)) as delta from (SELECT status,event_date,event_time FROM tbl_data WHERE event_date >= '2018-05-01' AND monitor_id =3 ORDER BY event_time ASC) group by status
Результат будет
status delta
1 4665465
2 965
Этот результат запроса дает мне правильный ответ для одиночного monitor_id, теперь я требовал его для нескольких monitor_id,
Как я могу достичь этого в одном / том же запросе?
1 ответ
Обычно это достигается с помощью условных выражений. подобно SELECT ...,if(monitor_id = 1, status, NULL) AS status1,...
а затем вы выполняете агрегатную функцию, которая, как вы, возможно, знаете, пропускает значения NULL. Но я провел некоторое тестирование, и оказалось, что из-за внутренностей clickhouse runningDifference()
не может отличить столбцы, полученные из одного источника. В то же время он отлично различает столбцы, полученные из разных источников. Это ошибка.
Я открыл вопрос на Github: https://github.com/yandex/ClickHouse/issues/2590
ОБНОВЛЕНИЕ: разработчики отреагировали невероятно быстро и с последним источником из master
вы можете получить то, что вы хотите с помощью стратегии, которую я описал. Смотрите вопрос для примера кода.