不确定是否有一种优雅的方式来实现这一点:
数据
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执行操作,然后单独查询以获得最高值?或者将批次拉入应用程序并从那里过滤?
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)
获得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)
| 归档时间: |
|
| 查看次数: |
8809 次 |
| 最近记录: |