MySQL按分组选择最大记录
我试图在一个表中创建一个查询,该表包含大约500000条记录和大约50或60列。我需要的是将这些记录整理成组,并选择每组中的最大记录 为了简化这个问题,我有一个如下的表格MySQL按分组选择最大记录,mysql,group-by,max,Mysql,Group By,Max,我试图在一个表中创建一个查询,该表包含大约500000条记录和大约50或60列。我需要的是将这些记录整理成组,并选择每组中的最大记录 为了简化这个问题,我有一个如下的表格 +----+-------------+----------+--------+ | id | external_id | group_id | mypath | +----+-------------+----------+--------+ | 1 | 1003 | 1 | a |
+----+-------------+----------+--------+
| id | external_id | group_id | mypath |
+----+-------------+----------+--------+
| 1 | 1003 | 1 | a |
| 2 | 1004 | 2 | b |
| 3 | 1005 | 2 | c |
+----+-------------+----------+--------+
select * from temp GROUP BY group_id
简单的分组方式如下所示
+----+-------------+----------+--------+
| id | external_id | group_id | mypath |
+----+-------------+----------+--------+
| 1 | 1003 | 1 | a |
| 2 | 1004 | 2 | b |
| 3 | 1005 | 2 | c |
+----+-------------+----------+--------+
select * from temp GROUP BY group_id
返回
+----+-------------+----------+--------+
| id | external_id | group_id | mypath |
+----+-------------+----------+--------+
| 1 | 1003 | 1 | a |
| 2 | 1004 | 2 | b |
+----+-------------+----------+--------+
不错,但不是我想要的。我想要的是每组中最大输入id的完整记录。换句话说
+----+-------------+----------+--------+
| id | external_id | group_id | mypath |
+----+-------------+----------+--------+
| 1 | 1003 | 1 | a |
| 3 | 1005 | 2 | c |
+----+-------------+----------+--------+
不知何故,我希望在这里放一个max(external_id)语句来过滤需要的内容,但到目前为止,我所有的调查都失败了。请提供一些指导。当返回max(外部id)时,由于路径列不同,所以选择整个记录是很重要的。详细信息请参见
在MySQL中,这一直是一个恼人的问题。有很多方法可以解决这个问题,比如将几个字段连接在一起(从外部_id开始),然后选择其中的MAX(),然后将其重新拆分
我建议您使用派生表。第一个表(t1)是从一个简单的查询中派生出来的,在这个查询中,您标识了MAX(external\u id)
,然后从该表中加入以获取其余的数据
仅当外部\u id
是唯一的
SELECT
t1.group_id, some_table.id, some_table.mypath
FROM
(
SELECT group_id, MAX(external_id) AS external_id
FROM some_table
GROUP BY group_id
) as t1
INNER JOIN
sometable ON t1.external_id = sometable.external_id
WHERE ...
也许你可以使用“选择最大值(外部id)作为最大值,*从临时组到临时组的id”来实现这一点。是的,你是对的。改变问题是最好的方法,我应该遵循“如果你有一个你不能解决的问题,把它改成你能解决的”。有了合适的索引,它工作得很好。小问题,但您选择t1.group\U id而不是某些_table.group\U id有什么原因吗?效率更高吗?