为具有最大值的行选择不同的列值

时间:2013-06-26 15:31:56

标签: sql-server tsql sql-server-2008-r2

我希望以更清洁的方式做一些我知道如何做某种方式的事情。我想检索MAXI值的UserId以及MAX ID值。假设我有一个包含这样数据的表:

ID  UserId  Value  
1   10      'Foo'  
2   15      'Blah'  
3   10      'Blech'  
4   20      'Qwerty'

我想要检索:

ID   UserId  
4    20

我知道我可以这样做:

SELECT
 t.ID,
 t.UserID
FROM
(
 SELECT MAX(ID) as [MaxID]
 FROM table
) as m
JOIN table as t ON m.MaxID = t.ID

我只是模糊地熟悉ROW_NUMBER(),RANK()和其他类似的方法,我不禁相信这种情况可以从一些这样的方法中受益,以摆脱加入桌面。

3 个答案:

答案 0 :(得分:1)

你绝对可以使用ROW_NUMBER来做这样的事情:

with t1Rank as
(
  select *
    , t1Rank = row_number() over (order by ID desc)
  from t1 
)
select ID, UserID
from t1Rank
where t1Rank = 1

SQL Fiddle with demo

这种方法的优点是您可以将Value(或其他必填字段)带入结果集。另外,您可以根据需要调整订购/分组。

答案 1 :(得分:1)

您也可以使用这样的子查询来执行此操作:

SELECT  ID ,
        UserID
FROM    table
WHERE   ID = ( SELECT   MAX(ID)
               FROM     table
             );

答案 2 :(得分:1)

SELECT TOP 1 ID, UserID FROM <table> ORDER BY ID DESC