基于时间戳的基于MySQL的MySQL SELECT

时间:2017-10-05 19:12:34

标签: mysql

我有一个MySQL数据库,其中包含3个表格,如下所示。

Readings: (_id, value, timestamp, sensorId)
Sensor: (_id)
DeviceSensor: (deviceId, sensorId, timestamp)

每个Reading都有一个收集数据的时间戳。 SensorReading的所有者。 DeviceSensor包含DeviceSensor之间的关系,包括关系开始时的时间戳。

在我的架构中,当DeviceSensor配对时,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)]。也就是说,Readingstimestamp之间1483527932的{​​{1}}应该返回1507058076sensorId = 1之后的Readings应该返回1507058076

1 个答案:

答案 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的记录,这些记录用于主选择的当前传感器,仅限于配对达到读取时间戳的记录。 LIMITORDER BY ds.timestamp DESC一起选择最新的。{/ p>