获取上一个时间点的值。 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。物联网案例的主要内容,如果未能解决你的问题,请参考以下文章

如何在clickhouse中按时间顺序折叠相同的值行?

使用 ClickHouse 中另一个表中的值更新行

在 Clickhouse 中的多个列上应用 argMax

在clickhouse中与max()聚合时如何连续选择相应的值?

使用 ClickHouse 提取和求和字符串内的子字段的值

如何按不同的值将 clickhouse 中的 (value,count) 数组分组?