RunningDifference(x)表示多个x值

时间:2018-06-14 12:41:08

标签: yandex clickhouse

我的表tbl_data(event_time,monitor_id,type,event_date,status)

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 个答案:

答案 0 :(得分:0)

通常,这可以通过条件表达式来实现。像SELECT ...,if(monitor_id = 1, status, NULL) AS status1,...一样,然后执行您可能知道的,跳过NULL值的聚合函数。但是我进行了一些测试,结果发现由于Clickhouse内部runningDifference()无法区分源自同一来源的列。同时,它很好地区分了来自不同来源的列。这是一个错误。

我在Github上发布了一个问题:https://github.com/yandex/ClickHouse/issues/2590

更新:开发人员的反应异常迅速,使用master的最新消息,您可以通过我描述的策略获得想要的东西。请参见问题以获取代码示例。