这是我的sql小提琴。
http://sqlfiddle.com/#!2/7f0780/1/0
我似乎有一个问题,当我将两列分组以获取max()值时,它返回了错误的关联数据。
你会发现身份证不正确。
有人能帮帮我吗。
create table table1 (id int,id1 int, id2 int, version int);
insert into table1 values
(1,7,9,1),
(2,7,9,2),
(3,7,9,3),
(4,7,9,4),
(5,9,7,5),
(6,9,7,6);
SELECT max(version),id
FROM table1
group BY
id1,id2
MAX(VERSION) ID
4 1
6 5
最佳答案
您的SQL查询是:
SELECT max(version), id
FROM table1
group BY id1, id2
请注意,您是按两列分组的。但是,您在
select
语句中没有选择它们。相反,你有id
。id
的值来自任意行,如MySQLdocumentation中所述。我的建议是永远不要使用这个扩展,除非你真的,真的明白你在做什么。如果您希望与最大值关联的ID,可以使用
not exists
select *
from table1 t
where not exists (select 1
from table1 t1
where t1.id1 = t.id1 and
t1.id2 = t.id2 and
t1.version > t.version
);
也就是说,从
table1
中选择所有行,其中id1/id2对的版本没有更大的值。编辑:
出于性能方面的原因,我应该补充一点,在
table1(id1, id2, version)
上建立一个索引将对这个查询有很大帮助。关于mysql - SQL通过将两列分组来选择最大值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22115594/