mysql - 如何将 order by 和 group by 结合在一起?条件:按一列按另一列分组
问题描述
我对 MySQL 中的 order by 和 group by 组合有一个问题。以下是我的表结构。
+-------------+-----------+-----------+----------------------------+
| driver_id | lat | lng | creation |
+-------------+-----------+-----------+----------------------------+
| TDRV-000021 | 18.659180 | 73.756480 | 2019-03-13 09:21:39.225873 |
| TDRV-000021 | 18.659180 | 73.756480 | 2019-03-15 12:30:09.608296 |
| TDRV-000021 | 18.659135 | 73.756445 | 2019-03-10 15:38:37.954508 |
当我使用以下 SQL 命令(Order by Creation desc)时,
select driver_id, lat, lng, creation from `tabReal Time Location` order by creation desc;
我得到以下结果,
+-------------+-----------+-----------+----------------------------+
| driver_id | lat | lng | creation |
+-------------+-----------+-----------+----------------------------+
| TDRV-000021 | 20.659180 | 73.756480 | 2019-03-16 08:13:41.155528 |
| TDRV-000021 | 18.659180 | 73.756480 | 2019-03-15 19:44:06.206690 |
| TDRV-000021 | 18.659180 | 73.756480 | 2019-03-15 19:36:25.571260 |
| TDRV-000021 | 18.659180 | 73.756480 | 2019-03-15 19:35:55.115124 |
| TDRV-000021 | 18.659180 | 73.756480 | 2019-03-15 19:35:46.281953 |
| TDRV-000021 | 18.659180 | 73.756480 | 2019-03-15 19:35:00.986849 |
| TDRV-000021 | 18.659180 | 73.756480 | 2019-03-15 19:33:38.370099 |
| TDRV-000021 | 18.659180 | 73.756480 | 2019-03-15 19:32:57.589272 |
| TDRV-000021 | 18.659180 | 73.756480 | 2019-03-15 19:30:24.582391 |
| TDRV-000021 | 18.659180 | 73.756480 | 2019-03-15 19:29:23.809564 |
当我使用order by 和 group by 组合时,
select driver_id, lat, lng, creation from `tabReal Time Location` group by driver_id order by creation desc;
+-------------+-----------+-----------+----------------------------+
| driver_id | lat | lng | creation |
+-------------+-----------+-----------+----------------------------+
| TDRV-000027 | 18.659180 | 73.756480 | 2019-03-15 13:47:37.338828 |
| TDRV-000021 | 18.659180 | 73.756480 | 2019-03-13 09:21:39.225873 |
+-------------+-----------+-----------+----------------------------+
但正如您在上面的结果中看到的那样,我得到了错误的结果,我期待最新更新的 lat、lng列,如下所示。
+-------------+-----------+-----------+----------------------------+
| driver_id | lat | lng | creation |
+-------------+-----------+-----------+----------------------------+
| TDRV-000021 | 20.659180 | 73.756480 | 2019-03-16 08:13:41.155528 |
| TDRV-000027 | 20.659180 | 90.756480 | 2019-03-15 14:07:41.543089 |
+-------------+-----------+-----------+----------------------------+
解决方案
这是期待最新更新 la 的一种方法
select t.driver_id, lat, lng, order_id from `tabReal Time Location` t INNER JOIN (select max(creation) as latest_date,driver_id FROM `tabReal Time Location` group by driver_id)d ON t.creation= d.latest_date and d.driver_id = t.driver_id;
推荐阅读
- swift - 我无法在 xcode 的日期选择器中设置时间
- python - AttributeError:“str”对象在不和谐机器人中没有属性“get”
- json - Json 路径 - 如何仅从具有“请求”并给定“标题”:“subject_2”参数的部分获取“id”?
- python - 我可以使用数组作为索引对 numpy 数组进行切片吗?
- .net-core - Stryker.NET 从项目的根目录支持 SLN 文件
- python - 取消显示 Matplotlib 图
- javascript - 尝试访问来自 Spotify 的 JSON 响应中的项目时变得未定义
- java - 如何查询历史数据
- go - 如何在不使用 for 循环的情况下列出目录中的所有文件?
- python - 保存列表框中的选定项目以供其他类使用