我有一个包含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的最大版本。
答案 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)