我有 2 个表需要加入一个 select 语句,它应该只给我每个 sensorID 的最后一行(每个 sensorID 的最新值)。这是我的表格:
sensorID| Name | Description | stationID
---------------------------------
1 | Name1 | Desc1 | 2
2 | Name2 | Desc2 | 1
3 | Name3 | Desc3 | 3
4 | Name4 | Desc4 | 2
值(value)观
vID | sensorID | Date | Time | value
---------------------------------
1 | 1 | 2016-12-29 | 15:08:00 | 0.2
2 | 1 | 2016-12-29 | 15:10:00 | 0.21
3 | 1 | 2016-12-29 | 15:12:00 | 0.4
4 | 4 | 2016-12-29 | 15:14:00 | 12.2
我尝试运行以下命令:
SELECT * FROM H INNER JOIN Values V ON H.sensorID = V.sensorID WHERE H.stationID = 2;
产生了这些结果:
sensorID | Name | Description | stationID | vID | sensorID | Date | Time | value
1 | Name1| Desc1 | 2 | 1 | 1 |2016-12-29 | 15:08:00 | 0.2
1 | Name1| Desc1 | 2 | 2 | 1 |2016-12-29 | 15:10:00 | 0.21
1 | Name1| Desc1 | 2 | 3 | 1 |2016-12-29 | 15:12:00 | 0.4
4 | Name4| Desc4 | 2 | 4 | 1 |2016-12-29 | 15:14:00 | 12.2
但我正在寻找这个输出:
sensorID | Name | Description | stationID | vID | sensorID | Date | Time | value
1 | Name1| Desc1 | 2 | 3 | 1 |2016-12-29 | 15:12:00 | 0.4
4 | Name4| Desc4 | 2 | 4 | 1 |2016-12-29 | 15:14:00 | 12.2
最佳答案
如果您想要每个传感器的最后一行,我倾向于使用 id
列而不是日期/时间:
SELECT *
FROM H INNER JOIN
Values V
ON H.sensorID = V.sensorID
WHERE H.stationID = 2 AND
V.id = (SELECT MAX(v2.id) FROM Values v2 WHERE v2.SensorId = v.SensorId);
此版本可以很好地利用 Values(SensorId, id)
上的索引。
关于mysql - 内部加入最近的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41483281/