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 вы можете получить то, что вы хотите с помощью стратегии, которую я описал. Смотрите вопрос для примера кода.

Другие вопросы по тегам