这是我的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语句中没有选择它们。相反,你有idid的值来自任意行,如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/

10-09 13:00