首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >某些值的平均值,由来自其他消息的条目确定

某些值的平均值,由来自其他消息的条目确定
EN

Stack Overflow用户
提问于 2021-09-03 10:00:35
回答 1查看 46关注 0票数 1

我的流分析正在摄入不同类型的消息流。一些是type: telemetry的,另一些是type: flags的。我需要计算一些遥测值的移动窗口的平均值,但只考虑前面有一个标志消息的值为true的值。

换句话说:无论是否考虑遥测来计算平均值,标志信息都会打开/关闭。

我尝试了以下查询:

代码语言:javascript
运行
复制
SELECT
    devId,
    type,
    AVG ("myValue") OVER ( LIMIT DURATION (second, 30) WHEN
        LAG (value) OVER (LIMIT DURATION(minute, 5) WHEN type='flag' and text='myValueFlag') = 1
    ) as 'myValueAvg'
    MAX("ts") as 'ts'
INTO "eventhub-output"
FROM "iothub-input" TIMESTAMP BY "ts"
WHERE type = 'telemetry'
GROUP BY devId, type, SlidingWindow(second, 30)

但我得到了一条错误信息:

在GROUP查询中,分析函数既不能在GROUP BY中使用,也不能在SELECT中使用,除非它们是聚合函数的参数,例如SUM(滞后(X)超过(限制持续时间(ss,5)。

我不知道怎么从这里开始。文档

延迟不受WHERE子句中的谓词、join子句中的联接条件或当前查询的GROUP子句中的分组表达式的影响,因为它是在这些子句之前计算的。

因此,我假设上面的查询应该可以工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-06 12:04:24

我终于开始工作了。诀窍是根本不使用AVG OVER子句。相反,我在一个子查询上使用一个简单的AVG来过滤相关的数据点。

代码语言:javascript
运行
复制
WITH relevant_data AS (
    SELECT 
        devId, 
        myValue, 
        ts
    FROM "iothub-input" TIMESTAMP by "ts"
    WHERE myValue IS NOT NULL
    AND type = 'telemetry'
    AND LAG (value,1,1) OVER ( LIMIT DURATION(minute, 5) WHEN type='flag' and text='myValueFlag') = 1
)

SELECT 
    devId,
    AVG ( myValue ) as 'myValueAvg',
    MAX("ts") as 'ts'
FROM relevant_data
GROUP BY devId, SlidingWindow(second, 30)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69043072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档