SQL通过对两列进行分组来选择最大值

时间:2014-03-01 14:30:18

标签: mysql sql group-by max

这是我的小提琴。

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

1 个答案:

答案 0 :(得分:1)

您的SQL查询是:

SELECT  max(version), id
FROM    table1
group BY id1, id2

请注意,您要按两列进行分组。但是,您在select语句中没有选择它们。相反,你有idid的值来自任意行,如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)上的索引将有助于此查询。