我有一个MySQL数据库,其中包含3个表格,如下所示。
Readings: (_id, value, timestamp, sensorId)
Sensor: (_id)
DeviceSensor: (deviceId, sensorId, timestamp)
每个Reading
都有一个收集数据的时间戳。 Sensor
是Reading
的所有者。 DeviceSensor
包含Device
和Sensor
之间的关系,包括关系开始时的时间戳。
在我的架构中,当Device
与Sensor
配对时,Sensor
会忽略之前的Devices
。
我需要的是在每次阅读时查询所有Readings
并将其与相应的Device
相关联。例如:
DeviceSensor = [(1,1,1483527932),(1,2,1507058076)]
Sensor = [(1)]
Readings = [(1,5,1483527932,1),(2,3,1493527932,1),(3,7,1507058076,1)]
使用此数据,我的查询将返回:[(1,5,1483527932,1),(2,3,1493527932,1),(3,7,1507058076,2)]
。也就是说,Readings
和timestamp
之间1483527932
的{{1}}应该返回1507058076
而sensorId = 1
之后的Readings
应该返回1507058076
。
答案 0 :(得分:2)
SELECT r._id
,r.value
,r.timestamp
,(SELECT max(ds.deviceId) as deviceId
FROM DeviceSensor as ds
WHERE ds.timestamp <= r.timestamp
AND ds.sensorId = r.sensorId
ORDER BY ds.timestamp DESC
LIMIT 1) as deviceId
FROM Readings as r
子选择选择来自DeviceSensor
的记录,这些记录用于主选择的当前传感器,仅限于配对达到读取时间戳的记录。 LIMIT
和ORDER BY ds.timestamp DESC
一起选择最新的。{/ p>