【发布时间】:2021-11-28 17:59:01
【问题描述】:
类似这样的 Postgres 数据:
| id | read_at | value_1 |
| ------|------------------------|---------|
| 16239 | 2021-11-28 16:13:00+00 | 1509 |
| 16238 | 2021-11-28 16:12:00+00 | 1506 |
| 16237 | 2021-11-28 16:11:00+00 | 1505 |
| 16236 | 2021-11-28 16:10:00+00 | 1501 |
| 16235 | 2021-11-28 16:09:00+00 | 1501 |
| ..... | .......................| .... |
| 15266 | 2021-11-28 00:00:00+00 | 1288 |
每分钟添加一个值,并随着时间的推移而增加。
我想获取当天的当前总数并将其保存在 Grafana 统计面板中。上面是:221(1509-1288)。最新记录减去今天的第一条记录。
SELECT id,read_at,value_1
FROM xyz
ORDER BY id DESC
LIMIT 1;
由此给出最新记录 (A)。
SELECT id,read_at,value_1
FROM xyz
WHERE read_at = CURRENT_DATE
ORDER BY id DESC
LIMIT 1;
由此给出当天的第一条记录 (B)。
Grafana 无法对此 (A-B) 进行数学运算。最好是单个查询。
遗憾的是,我的数据库知识很少,构建查询的尝试没有成功,现在已经花了整个下午。
解决这个问题的理论思路:
- 在今天的时间范围内从最大值中减去最小值。
- 使用滞后,将其滞后于今天记录的记录数。从最新值中减去滞后值。
- 窗口函数。
最好的方法(性能方面)是什么?如何编写这样的查询?
【问题讨论】:
标签: sql postgresql grafana