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

时间:2018-01-15 15:14:15

标签: mysql laravel

我在这里遇到了一个令人困惑的情况......在mysql中有一个如下所示的表:

https://{functionName}.azurewebsites.net/api/endpoint?Params
The Header contains Authorization Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJS.....

我正在尝试获取每个vehicle_id的最后一个已知位置

这是我试过的:

                    ----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     |
+--------------------------------------------------------+

但上面的代码只返回一辆车。

我需要同样地检索所有车辆,所以我该怎么做?

提前致谢。

3 个答案:

答案 0 :(得分:2)

这似乎是您想要的查询:

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值。

答案 1 :(得分:0)

使用DISTINCT,如下所示:

SELECT DISTINCT(*) FROM locations ORDER BY id

答案 2 :(得分:0)

在Laravel中作为你的标签

@RequestMapping(value="/", method = RequestMethod.GET, produces = "application/json")
@ResponseBody
public String info() {
    return "hello";
}