获取上一个时间点的值。 Clickhouse。物联网案例
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取上一个时间点的值。 Clickhouse。物联网案例相关的知识,希望对你有一定的参考价值。
我有带钥匙的桌子(时间,设施)。对于每个键,存储从传感器接收的(值)。例如:
┌─日期────┬设施┬值┬│2017-09-09│10002│10││2017-09-10│10001│12││2017-09-12│10002│15││2017-09-15│10001│17│└────────┴────┘──┘
我想计算当前值与上一个值相比的增加量。像这样的东西:
┌─日期────┬设施┬─价值┬│2017-09-12│10002│15/10│// 15当前,设施10002之前的10│2017-09-15│10001│17/12│// 17当前,设施1212之前的12└────────┴────┘────┘
为了获得此结果,我需要使用JOIN,但是从文档中了解,JOIN操作中的比较条件仅用于相等,而不能使用不相等。
当然,我可以做笛卡尔乘积,然后在WHERE部分中进行日期比较(使所有日期都小于当前日期),然后从过滤的日期中选择最大日期。但这非常浪费时间和内存!
[请帮助我创建最佳查询,因为这种情况是物联网的典型情况
答案
select groupArray(1)(date)[1], facility, groupArray(2)(value) from
(select date, facility, value from
(select '2017-09-09' date, 10002 facility, 10 value union all
select '2017-09-10' , 10001, 12 union all
select '2017-09-12' , 10002, 15 union all
select '2017-09-15' , 10001, 17 )
order by facility, date desc)
group by facility
┌─arrayElement(groupArray(1)(date), 1)─┬─facility─┬─groupArray(2)(value)─┐
│ 2017-09-15 │ 10001 │ [17,12] │
│ 2017-09-12 │ 10002 │ [15,10] │
└──────────────────────────────────────┴──────────┴──────────────────────┘
以上是关于获取上一个时间点的值。 Clickhouse。物联网案例的主要内容,如果未能解决你的问题,请参考以下文章