我有两个时间序列数据表,我试图查询,不知道如何正确地执行此操作。
第一个表是设备测量的时间序列数据。每个设备都与一个源关联,数据包含每小时测量。在这个例子中,有5个设备(101-105),数据为5天(6月1日至5日)。
device_id date_time source_id meas
101 2016-06-01 00:00 ABC 105
101 2016-06-01 01:00 ABC 102
101 2016-06-01 02:00 ABC 103
...
101 2016-06-05 23:00 ABC 107
102 2016-06-01 00:00 XYZ 102
...
105 2016-06-05 23:00 XYZ 104
第二个表是源测量的时间序列数据。每个来源都有三个小时测量值(meas_1,meas_2和meas_3)。
source_id date_time meas_1 meas_2 meas_3
ABC 2016-06-01 00:00 100 101 102
ABC 2016-06-01 01:00 99 100 105
ABC 2016-06-01 02:00 104 108 109
...
ABC 2016-06-05 23:00 102 109 102
XYZ 2016-06-01 00:00 105 106 103
...
XYZ 2016-06-05 23:00 103 105 101
我正在寻找一个查询来获取指定日期范围的数据,该日期范围可以获取设备的测量值及其相关源的测量值。此示例是从6月2日到4日查询设备101的结果。
device_id date_time d.meas s.meas_1 s.meas_2 s.meas_3
101 2016-06-02 00:00 105 100 101 102
101 2016-06-02 01:00 102 99 100 105
101 2016-06-02 02:00 103 104 108 109
...
101 2016-06-04 23:00 107 102 109 102
实际数据集可能会变大,假设100,000个设备和90天的每小时测量。因此,任何有关正确索引表格的帮助都将受到赞赏。我正在使用MySQL。
更新 - 已解决
这是我使用的查询:
SELECT d.device_id, d.date_time, d.meas, s.meas_1, s.meas_2, s.meas_3
FROM devices AS d
JOIN sources AS s
ON d.source_id = s.source_id AND d.date_time = s.date_time AND d.device_id = '101' AND d.date_time >= '2016-06-02 00:00' AND d.date_time <= '2016-06-04 23:00'
ORDER BY d.date_time;
对于它的价值,它也适用于WHERE子句中的过滤器而不是JOIN,但它的性能较慢。谢谢你的帮助。