我正在尝试在包含约 500,000 条记录和约 50 或 60 列的表中创建一个查询。我需要的是将这些记录整理成组并选择每个组中的最大记录。
为了简化问题我有一个表格如下
+----+-------------+----------+--------+
| id | external_id | group_id | mypath |
+----+-------------+----------+--------+
| 1 | 1003 | 1 | a |
| 2 | 1004 | 2 | b |
| 3 | 1005 | 2 | c |
+----+-------------+----------+--------+
简单的group by如下
select * from temp GROUP BY group_id
返回
+----+-------------+----------+--------+
| id | external_id | group_id | mypath |
+----+-------------+----------+--------+
| 1 | 1003 | 1 | a |
| 2 | 1004 | 2 | b |
+----+-------------+----------+--------+
不错,但不是我想要的。我想要的是每个组中 max Enternal_id 的完整记录。换句话说
+----+-------------+----------+--------+
| id | external_id | group_id | mypath |
+----+-------------+----------+--------+
| 1 | 1003 | 1 | a |
| 3 | 1005 | 2 | c |
+----+-------------+----------+--------+
不知何故,我希望在这里放置一个 max(external_id) 语句来过滤所需的内容,但到目前为止我所有的调查都失败了。一些指导将不胜感激。重要的是,当返回 max(external_id) 时,选择整个记录,因为路径列不同。
很多信息在http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/
这一直是 MySQL 中一个恼人的问题。有一些方法可以解决这个问题,例如将多个字段连接在一起(从 external_id 开始),然后选择其中的 MAX(),然后将其重新分开。
我建议您使用派生表。第一个表 (t1) 源自一个简单的查询,您可以在其中识别MAX(external_id)
,然后您从中加入以获取其余数据。
这只是如果external_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 ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)