这是我的小提琴。
http://sqlfiddle.com/#!2/7f0780/1/0
我似乎遇到一个问题,当我将两列分组以获取max()值时,它会返回错误的关联数据。
您将看到ID不正确。
有人可以帮助我。
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
答案 0 :(得分:1)
您的SQL查询是:
SELECT max(version), id
FROM table1
group BY id1, id2
请注意,您要按两列进行分组。但是,您在select
语句中没有选择它们。相反,你有id
。 id
的值来自任意行,如MySQL documentation中所述。我的建议是永远不要使用这个扩展,除非你真的非常了解你在做什么。
如果您希望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)
上的索引将有助于此查询。