【发布时间】:2021-11-27 11:38:21
【问题描述】:
在 Grafana 中,我们希望显示在所选时间间隔内指示最大 15 分钟平均值的条形。我们的数据有固定的 1 分钟间隔。数据库是 Postgresql。
为了显示 15 分钟的平均值,我们使用以下查询:
SELECT
timestamp AS time,
AVG(rawvalue) OVER(ORDER BY timestamp ROWS BETWEEN 7 PRECEDING AND 7 FOLLOWING) AS value,
'15-min Average' AS metric
FROM database.schema
WHERE $__timeFilter(timestamp) AND device = '$Device'
ORDER BY time
为了在选定的时间间隔内显示表示最大原始值的条形,我们使用以下查询:
SELECT
$__timeGroup(timestamp,'$INTERVAL') AS time,
MAX(rawvalue) AS value,
'Interval Max' AS metric
FROM database.schema
WHERE $__timeFilter(timestamp) AND device = '$Device'
GROUP BY $__timeGroup(timestamp,'$INTERVAL')
ORDER BY time
两种解决方案的简单组合不起作用:
SELECT
$__timeGroup(timestamp,'$INTERVAL') AS time,
MAX(AVG(rawvalue) OVER(ORDER BY timestamp ROWS BETWEEN 7 PRECEDING AND 7 FOLLOWING)) AS value,
'Interval Max 15-min Average' AS metric
FROM database.schema
WHERE $__timeFilter(timestamp) AND device = '$Device'
GROUP BY $__timeGroup(timestamp,'$INTERVAL')
ORDER BY time
我们得到错误:“pq:聚合函数调用不能包含窗口函数调用”。
有一个关于 SO 使用 "with" (Count by criteria over partition) 的建议,但我不知道在我们的案例中使用它是否热门。
【问题讨论】:
标签: sql postgresql aggregate-functions grafana window-functions