SQL根据时间戳差异查询数据

时间:2018-08-31 13:38:44

标签: mysql sql database influxdb

我有一个与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进行查询。

2 个答案:

答案 0 :(得分:4)

我想在V.G.的基础上增加一个额外的答案,我觉得很好。出于性能方面的考虑,您可能需要重新查询并添加一个良好的索引,如:

/

然后查询可能是:

create index ix1 on table (timestamp);

有时候,一个简单的“查询表述”会带来很大的性能差异。

答案 1 :(得分:3)

使用带有时间戳记条件的内部联接将表联接到自身,以包含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