如何加入两个时间序列查询

时间:2019-08-13 22:27:16

标签: sql

我的桌子设置如下:

id .   int(11) PK
key .   char(4) PK
timestamp .   datetime PK
value .   double

我在此表中记录了IoT传感器数据的多个时间序列测量结果。

例如,key可能类似于temphumidity

对此进行查询:

SELECT * where id =496 and key == temp; SELECT * where id =496 and key == humidity;

对于相同的id,这两个都准确地排列在timestamp上。 combine最好的方法是(由于缺乏更好的用语)这两个查询的结果是什么?

联接来自不同表的数据 https://codeinthehole.com/tips/joining-between-date-and-datetime-fields-in-postgres/

2 个答案:

答案 0 :(得分:0)

如果要将两个读数都返回到同一记录中,则可能需要“自连接”表-如下所示将其自身连接起来:

SELECT T1.timestamp, T1.id, T1.key, T1.value, T2.key, T2.value 
FROM Table AS T1
INNER JOIN Table AS T2 ON T2.id = T1.id
WHERE (T1.key LIKE 'temp' AND T2.key LIKE 'humidity')

答案 1 :(得分:0)

有条件聚合:

select 
  id, timestamp, 
  max(case key when 'temp' then value end) temp, 
  max(case key when 'humidity' then value end) humidity
from tablename
where id = 496 and key in ('temp', 'humidity')
group by id, timestamp

我假设存在相同的timestamp 1 value和1 key = 'temp' value