如何在mysql中为每辆车选择一条记录

xuo3flqw  于 2021-06-24  发布在  Mysql
关注(0)|答案(3)|浏览(227)

我遇到了一个混乱的局面。。。在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     |
+--------------------------------------------------------+

我正在尝试获取每个车辆id的最后已知位置
以下是我尝试的:

SELECT * FROM `locations` ORDER BY id DESC limit 1

但是上面的代码只返回一辆车。
我需要以同样的方式重新检查所有的车辆,那么我该怎么做呢?
提前谢谢。

xa9qqrwz

xa9qqrwz1#

这似乎是您想要的查询:

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 表到查找每辆车的最新记录的子查询。我使用上面的“似乎”是因为你的样本数据,可能是巧合,显示了每辆车相同的准确时间。当然,为了让我的回答有意义,你需要有更多的答案 time 每辆车最近记录的值。

7xzttuei

7xzttuei2#

作为你的标签

$loc = Location::select('id', 'lat', 'lon', 'vehicle_id', DB::RAW('max(time) as "time"'))                                   
                            ->groupBy('vehicle_id')
// optional to orderby time ->orderBy('time', 'DESC')
                            ->get();
ejk8hzay

ejk8hzay3#

使用distinct,如下所示:

SELECT DISTINCT(*) FROM locations ORDER BY id

相关问题