Clickhouse:如何获得 2 个连续行的平均值?
Posted
技术标签:
【中文标题】Clickhouse:如何获得 2 个连续行的平均值?【英文标题】:Clickhouse: How to get averages of 2 consecutive rows? 【发布时间】:2022-01-22 21:17:33 【问题描述】:创建表 sensor_2 ( 当 DateTime64 时, 值 Float32 ) 引擎=合并树 PARTITION BY toYYYYMM(when) ORDER BY (when)
INSERT INTO sensor_2 值 ('2021-01-01 00:00:00.000', 1.52), ('2021-01-01 00:00:00.001', 1.54), ('2021-01-01 00:00:00.002', 1.42) , ('2021-01-01 00:00:00.003', 1.54), ('2021-01-01 00:00:00.004', 1.42), ('2021-01-01 00:00:00.005', 1.52 );
【问题讨论】:
请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。 【参考方案1】:when
始终为 '2021-01-01 00:00:00' 哪些行是连续的?
我改变了时间。
CREATE TABLE sensor_2 ( when DateTime64, value Float32 ) ENGINE=MergeTree PARTITION BY toYYYYMM(when) ORDER BY (when);
INSERT INTO sensor_2 Values ('2021-01-01 00:00:00', 1.52), ('2021-01-01 00:00:01', 1.54), ('2021-01-01 00:00:02', 1.42), ('2021-01-01 00:00:03', 1.54), ('2021-01-01 00:00:04', 1.42), ('2021-01-01 00:00:05', 1.52);
SELECT
*,
avg(value) OVER (ORDER BY when ASC Rows BETWEEN 1 PRECEDING AND CURRENT ROW) AS sliding_avg2
FROM sensor_2
┌────────────────────when─┬─value─┬───────sliding_avg2─┐
│ 2021-01-01 00:00:00.000 │ 1.52 │ 1.5199999809265137 │
│ 2021-01-01 00:00:01.000 │ 1.54 │ 1.5299999713897705 │
│ 2021-01-01 00:00:02.000 │ 1.42 │ 1.4799999594688416 │
│ 2021-01-01 00:00:03.000 │ 1.54 │ 1.4799999594688416 │
│ 2021-01-01 00:00:04.000 │ 1.42 │ 1.4799999594688416 │
│ 2021-01-01 00:00:05.000 │ 1.52 │ 1.4699999690055847 │
└─────────────────────────┴───────┴────────────────────┘
SELECT
when,
value,
(value + neighbor(value, -1)) / 2 AS sliding_avg2
FROM
(
SELECT *
FROM sensor_2
ORDER BY when ASC
)
┌────────────────────when─┬─value─┬───────sliding_avg2─┐
│ 2021-01-01 00:00:00.000 │ 1.52 │ 0.7599999904632568 │
│ 2021-01-01 00:00:01.000 │ 1.54 │ 1.5299999713897705 │
│ 2021-01-01 00:00:02.000 │ 1.42 │ 1.4799999594688416 │
│ 2021-01-01 00:00:03.000 │ 1.54 │ 1.4799999594688416 │
│ 2021-01-01 00:00:04.000 │ 1.42 │ 1.4799999594688416 │
│ 2021-01-01 00:00:05.000 │ 1.52 │ 1.4699999690055847 │
└─────────────────────────┴───────┴────────────────────┘
【讨论】:
是的,时间基本一致。传感器输出为 1KHz,因此每秒有一千个点。我需要按(i)连续 4 行(ii)连续 24 行(iii)连续 1440 行对数据进行分组。如何 GROUP BY N 连续行? 就用我的例子? 哪里指定连续行数? 你给我的例子并没有解决我的挑战。我想按 N 连续行对数据进行分组,然后计算其平均值。如果 N = 2,那么从 6 行开始,最终表应该有 3 行。即 6/N 你的例子没有帮助。我几乎什么都不懂。提供正常输入和所需输出。以上是关于Clickhouse:如何获得 2 个连续行的平均值?的主要内容,如果未能解决你的问题,请参考以下文章