如何查询以获取与另一个字段相关的字段的最大值? Group By不起作用? (MySQL的)

时间:2014-02-21 01:35:35

标签: mysql sql

我有一个包含2列的表:EntryID及其版本。每个条目可以有许多不同的版本,最高版本是该条目的最新版本。此外,每个entryID可能有多个名称

EntryID - Version - EntryName
212 - 1 - Car
212 - 1 - Car2
212 - 2 - Batr
212 - 2 - hoo
451 - 2 - Csert
451 - 3 - xxx
451 - 3 - xxx2
111 - 1 - yyy
333 - 4 - ggg

现在,根据提供的entryID,我需要获取只有最大版本的所有条目。

例如,用户可以输入212& 451&按下按钮然后它会显示:

EntryID - Version - EntryName
212 - 2 - Batr
212 - 2 - hoo
451 - 3 - xxx
451 - 3 - xxx2

以下查询使用group by但不起作用。

 select * from table where entryID in (212,451) and version in 
(select max(version) from table where entryID in (212,451) group by entryID)

结果:

EntryID - Version - EntryName
212 - 2 - Batr
212 - 2 - hoo
451 - 2 - Csert
451 - 3 - xxx
451 - 3 - xxx2

这是不正确的,因为条目451包含版本2,它是条目212的最大版本。

3 个答案:

答案 0 :(得分:1)

SELECT t1.*
FROM Table t1
JOIN (SELECT EntryID, MAX(version) maxversion
      FROM Table
      WHERE EntryID IN (212, 451)
      GROUP BY EntryID) t2
ON t1.EntryID = t2.EntryID AND t1.version = t2.maxversion

答案 1 :(得分:1)

尝试:

select y.*
  from y.table y
 where y.entryid in (212, 451)
   and y.version =
       (select max(x.version) from table x where x.entryid = y.entryid)

答案 2 :(得分:0)

select *
from test_table a
where exists (select 1 
    from test_table b 
    where a.id = b.id 
    having max(b.version) = a.version)