我有一个与sql数据库有关的问题.
即我想创建一个查询获取某个测量列的平均值,但仅适用于时间差小于60秒的后续行.
示例表看起来像这样:
| ID | Measurement | Timestamp |
| 1 | 0.564 | 1535648400|
| 2 | 0.456 | 1535648459|
| 3 | 0.785 | 1535648501|
| 4 | 0.321 | 1535648620|
时间戳之间的差异对于所有行都是可以的,除了3到4之间,它们相差超过60秒.在这种情况下,平均值不会采用ID为4的行,而只采用前3行.
我主要计划为InfluxDB数据库编写此查询,但通常也可以查询结构化SQL的查询.
解决方法:
使用带有时间戳条件的内部联接将表连接到自身,以包括60秒的所有记录.下面的标准SQL(需要针对InfluxDB进行调整):
SELECT t1.ID, t1.measurement, t1.timestamp, avg(t2.measurement)
FROM table t1, table t2
WHERE t1.timestamp <= t2.timestamp
AND t1.timestamp + 60*1000 > t2.timestamp
GROUP BY t1.ID, t1.measurement, t1.timestamp