我希望以更清洁的方式做一些我知道如何做某种方式的事情。我想检索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()和其他类似的方法,我不禁相信这种情况可以从一些这样的方法中受益,以摆脱加入桌面。
答案 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
这种方法的优点是您可以将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