SQL在两个(或更多)列上从表中选择最高值

Rem*_*ima 4 sql sql-server

不确定是否有一种优雅的方式来实现这一点:

数据

ID   Ver   recID  (loads more columns of stuff)  
1     1       1  
2     2       1  
3     3       1  
4     1       2  
5     1       3  
6     2       3  
Run Code Online (Sandbox Code Playgroud)

因此,我们将ID作为主键,将Ver作为版本,将recID作为记录ID(将所有版本绑定在一起的任意基本ID).

所以我想select从以下数据,第3,4和6行,即给定记录ID的最高版本.

有没有办法用一个SQL查询执行此操作?或者我是否需要对SELECT DISTINCT记录ID执行操作,然后单独查询以获得最高值?或者将批次拉入应用程序并从那里过滤?

Lie*_*ers 5

A GROUP BY足以获得每个的最大版本recID.

SELECT  Ver = MAX(Ver), recID
FROM    YourTable
GROUP BY
        recID
Run Code Online (Sandbox Code Playgroud)

如果还需要相应的ID,则可以将其包装到子选择中

SELECT  yt.*
FROM    Yourtable yt
        INNER JOIN (
          SELECT  Ver = MAX(Ver), recID
          FROM    YourTable
          GROUP BY
                  recID
        ) ytm ON ytm.Ver = yt.Ver AND ytm.recID = yt.RecID
Run Code Online (Sandbox Code Playgroud)

或者,根据您使用的SQL Server版本,使用 ROW_NUMBER

SELECT  *
FROM    (
          SELECT  ID, Ver, recID
                  , rn = ROW_NUMBER() OVER (PARTITION BY recID ORDER BY Ver DESC)
          FROM    YourTable
        ) yt
WHERE   yt.rn = 1
Run Code Online (Sandbox Code Playgroud)


jas*_*son 5

获得ver给定的最大值recID很容易.要获得ID,您需要加入一个获得这些最大值的嵌套查询:

select ID, ver, recID from table x
inner join
    (select max(ver) as ver, recID
     from table
     group by recID) y
on x.ver = y.ver and x.recID = y.recID
Run Code Online (Sandbox Code Playgroud)