我有一个包含以下内容的行集:
id1 id2 value
--------------------------------
1 1 50
2 1 60
3 1 70
4 1 40
5 1 53
15 2 10
16 2 19
17 2 17
18 2 13
20 2 14
40 3 32
40 3 34
44 3 54
40 3 67
43 3 80
在此行集中,我希望每个id2组的id1值具有最大值。像这样:
id1 id2 value
--------------------------------
3 1 70
16 2 19
43 3 80
我只关心id1和id2,值列仅用于说明目的。
查询必须在MariaDB 5.5上运行。我一直在考虑这个问题,但是还没有找到一个下降的(和性能...)SQL查询。
有什么建议吗?
答案 0 :(得分:2)
SELECT t.*
FROM sometable t
INNER JOIN (
SELECT
id2,
MAX(`value`) val
FROM sometable
GROUP BY id2
) t2
ON t.`value` = t2.val
AND t.id2 = t2.id2
答案 1 :(得分:0)
想到一个相关的子查询:
select t.*
from t
where t.value = (select max(t2.value)
from t t2
where t2.id2 = t.id2
);
为了提高性能,您希望在(id2, value)
上建立索引。