我在这里遇到了一个令人困惑的情况...mysql 中有一个表,如下所示:
----locations----
+--------------------------------------------------------+
| id | time | lat | lon | vehicle_id|
| 1 | 1513865119 |13.0398796 | 77.6242876 | 1 |
| 2 | 1513865119 |13.0398796 | 77.6242876 | 1 |
| 3 | 1513865119 |13.0398796 | 77.6242876 | 2 |
| 4 | 1513865119 |13.0398796 | 77.6242876 | 2 |
| 5 | 1513865119 |13.0398796 | 77.6242876 | 4 |
| 6 | 1513865119 |13.0398796 | 77.6242876 | 3 |
| 7 | 1513865119 |13.0398796 | 77.6242876 | 2 |
| 8 | 1513865119 |13.0398796 | 77.6242876 | 3 |
| 9 | 1513865119 |13.0398796 | 77.6242876 | 3 |
| 10 | 1513865119 |13.0398796 | 77.6242876 | 1 |
+--------------------------------------------------------+
我正在尝试获取每个vehicle_id的最后已知位置
这是我尝试过的:
SELECT * FROM `locations` ORDER BY id DESC limit 1
但是上面的代码只返回一辆车。
我需要以类似的方式检索所有车辆,那么我该如何做到这一点?
提前致谢。
最佳答案
这似乎是您想要的查询:
SELECT t1.*
FROM locations t1
INNER JOIN
(
SELECT vehicle_id, MAX(time) AS max_time
FROM locations
GROUP BY vehicle_id
) t2
ON t1.vehicle_id = t2.vehicle_id AND
t1.time = t2.max_time;
这会将您的 locations
表连接到一个子查询,该子查询查找每辆车的最新记录。我在上面使用“似乎”是因为您的样本数据(也许是巧合)显示每辆车的确切时间相同。当然,为了让我的答案有意义,您需要为每辆车的最新记录提供更大的时间
值。
关于mysql - 如何在mysql中为每辆车选择一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48265738/