1

我希望有一种更清洁的方式来做我知道如何做的事情。我想检索 MAX ID 值的 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() 和其他类似方法只是模糊地熟悉,我不禁相信这种情况可以从一些这样的方法中受益,从而摆脱重新加入表的情况。

4

3 回答 3

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 与演示

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

于 2013-06-26T15:37:39.663 回答
1

您也可以使用这样的子查询来做到这一点:

SELECT  ID ,
        UserID
FROM    table
WHERE   ID = ( SELECT   MAX(ID)
               FROM     table
             );
于 2013-06-26T15:49:52.683 回答
1
SELECT TOP 1 ID, UserID FROM <table> ORDER BY ID DESC
于 2013-06-26T16:02:04.363 回答