Я использую 6 таблиц для измерения датчика.
DEVICES
id imei name
1 123456789 device1
BMP085
id deviceId date time pressure altitude tempC tempF
1 1 2014-02-21 20:01:02 000.00 000.00 00.00 00.00
GPS
id deviceId date time latitude longitude timeUtc timeFix altitude eps epx epv ept speed climb track mode satellites
1 1 2014-02-21 20:01:02 0.000000 0.000000 00:00:00 00:00:00 0.00 0.000 0.000 0.000 0.000 0.000 0.000 0.00 0 0
HIH6130
id deviceId date time humidity tempC tempF
1 1 2014-02-21 20:01:02 00.00 00.00 00.00
MINIMU9V2
id deviceId date time heading tempC tempF xAngle yAngle zAngle xAccel yAccel zAccel xMagn yMagn zMagn
1 1 2014-02-21 20:01:02 000.00 00.00 00.00 00.000 00.000 00.000 00.000 00.000 00.000 00.000 00.000 00.000
RASPI
id deviceId date time tempC tempF
1 1 2014-02-21 20:01:02 00.00 00.00
Я хотел бы выбрать все соответствующие наборы данных таблиц BMP085, GPS, HIH6130, MINIMU9V2 и RASPI, которые имеют deviceId = 1. Предполагается, что будут отображаться только наборы данных для этого устройства. Кроме того, я хотел бы выбрать все совпадающие наборы данных таблиц BMP085, GPS, HIH6130, MINIMU9V2 и RASPI, которые имеют дату = 2014-02-21 и время >= 20:01:00 И ‹= 20:01:30.
Моя текущая инструкция SQL выглядит так:
SELECT t1.imei, t1.name,
t2.date, t2.time, t2.pressure, t2.altitude, t2.tempC, t2.tempF,
t3.latitude, t3.longitude, t3.timeUtc, t3.timeFix, t3.altitude, t3.eps, t3.epx, t3.epv, t3.ept, t3.speed, t3.climb, t3.track, t3.mode, t3.satellites,
t4.humidity, t4.tempC, t4.tempF,
t5.heading, t5.tempC, t5.tempF, t5.xAngle, t5.yAngle, t5.zAngle, t5.xAccel, t5.yAccel, t5.zAccel, t5.xMagn, t5.yMagn, t5.zMagn,
t6.tempC, t6.tempF
FROM hab_DEVICES t1
LEFT JOIN hab_BMP085 t2 ON t1.id = t2.deviceId
LEFT JOIN hab_GPS t3 ON t1.id = t3.deviceId
LEFT JOIN hab_HIH6130 t4 ON t1.id = t4.deviceId
LEFT JOIN hab_MINIMU9V2 t5 ON t1.id = t5.deviceId
LEFT JOIN hab_RASPI t6 ON t1.id = t6.deviceId
WHERE t1.id = 1
AND t2.date = '2014-02-21'
AND t2.date = t3.date
AND t2.date = t4.date
AND t2.date = t5.date
AND t2.date = t6.date
AND t2.time >= '20:01:00'
AND t2.time <= '20:01:30'
AND t2.time = t3.time
AND t2.time = t4.time
AND t2.time = t5.time
AND t2.time = t6.time
Результат неверен, так как он отображает несколько результатов для одного заданного момента времени вместо одного результата. Кроме того, производительность довольно плохая.
Вот моя скрипка: http://sqlfiddle.com/#!2/639c05/1/ 0а>
Любая помощь приветствуется.