我是SQL新手,所以请原谅我.在我的一个表格中,我有一系列逆变器电压值,每分钟写一次.我正在显示GRAFANA上的数据,并希望找到异常点(如果有的话).对我来说,一个非常简单的解决方案是在特定时间获得所有电压的平均值,看看1值是否偏离了"很多".
一些背景知识:使用postresql,以及列"timestamp","value","name" name是标识符,现在反相器的格式为"INVX_INVERTER_SG_Branch VoltageY",其中Y ={1,3,5,7,9,11,13,15,17,19,21,23},X ={01—18}.
第一个临时查询按预期工作,它生成一个表,其中包含当时所有组合的时间戳和平均值.在第二个SELECT查询中,我得到的值都是废话.在DB表上没有名称包含‘SG_BRANCH电压’的其他数据.我们友好的闲聊在吐垃圾.
理想情况下,结果将显示时间戳和异常点的值.然后我将在图表上画出这些点.这将仅仅是一个指标,表明这一点并不像预期的那样.
WITH average AS (
SELECT
"timestamp",
AVG(value) AS avg_value
FROM
st_values
WHERE
"timestamp" BETWEEN NOW() - INTERVAL '1 day' AND NOW() AND
"name" LIKE 'INV%_INVERTER_SG_Branch Voltage%'
GROUP BY "timestamp"
)
SELECT
v."timestamp",
v.value
FROM
st_values v
JOIN
average av ON av."timestamp" = v."timestamp"
WHERE
v."timestamp" BETWEEN NOW() - INTERVAL '1 day' AND NOW() AND
v."name" LIKE 'INV%_INVERTER_SG_Branch Voltage%' AND
ABS(v.value - av.avg_value) / av.avg_value > 0.3
ORDER BY
v."timestamp";
上面的代码是(半?)没用我不知道如何调试这个.这产生了一些真正异常的点(即,躺在我的一条线上),但有些是(假的?)没有说谎
编辑:结果的截图.正如你所看到的,一些红点位于紫色(异常)线上,但是一些红点位于不应该有值的线上,