这是我上一篇文章的后续内容 如何计算满足条件的行的分数
我有一个带时间戳的表:
timestamp: timestamp
field1: double
...
more fields
我想要实现的是在特定时间窗口内满足标准的带时间戳的滚动行分数。例如,最后一分钟/5 小时/天满足“field1 > Crit”的行的分数。
我已经找到了一种方法来计算行滑动窗口上 field1 的平均值:
SELECT timestamp, avg(a.field1)
OVER(ORDER BY a.timestamp ROWS BETWEEN 29 PRECEDING AND CURRENT ROW)
AS output_name
FROM schema."table" a;
但我无法将其扩展到我所需要的。
range
窗框条款:演示
SELECT timestamp,
a.field1,
count(*)filter(where a.field1>5)over w1
/ (count(*)over w1)::float AS "fraction of field1 > crit",
avg(a.field1)over w1,
min(a.field1)over w1,
max(a.field1)over w1
FROM schema1."table1" AS a
WINDOW w1 AS (ORDER BY a.timestamp
RANGE BETWEEN '1 hour' PRECEDING
AND CURRENT ROW)
LIMIT 10;
时间戳 | 字段1 | field1 的分数 > 暴击 | 平均 | 分钟 | 最大 |
---|---|---|---|---|---|
2024-02-29 02:52:29.352841 | 6 | 1 | 6 | 6 | 6 |
2024-02-29 03:06:52.759728 | 2 | 0.5 | 4 | 2 | 6 |
2024-02-29 03:10:21.047632 | 9 | 0.6666666666666666 | 5.666666666666667 | 2 | 9 |
2024-02-29 03:37:06.321381 | 0 | 0.5 | 4.25 | 0 | 9 |
2024-02-29 03:45:06.147972 | 10 | 0.6 | 5.4 | 0 | 10 |
2024-02-29 03:48:36.642597 | 3 | 0.5 | 5 | 0 | 10 |
2024-02-29 04:17:40.280552 | 8 | 0.5 | 5.25 | 0 | 10 |
2024-02-29 04:19:19.055374 | 10 | 0.6 | 6.2 | 0 | 10 |
2024-02-29 04:27:43.887064 | 1 | 0.5 | 5.333333333333333 | 0 | 10 |
2024-02-29 04:54:47.489977 | 9 | 0.75 | 7 | 1 | 10 |