Вот мой стол:
EmpID | Rating | LoadID ----------------------- 1 5 100 1 7 101 1 8 102 2 6 100 2 6 101 3 4 102
Мне нужно выбрать только строки для последней (общей) LoadID. Исходя из вышеизложенного, последний (общий) LoadID равен 102, поэтому мне нужно иметь этот набор результатов:
LoadID
EmpID | Rating | LoadID ----------------------- 1 8 102 3 4 102
Вот пример того, как сделать это с помощью CTE:
with RankCTE as ( select EmpID , Rating , LoadID , Rank() over (order by LoadID desc) as R from TABLE ) select EmpID , Rating , LoadID from RankCTE where R = 1
Здесь то же самое, используя CTE
;WITH TblCTE as( SELECT [EmpId],[Rating],[LoadID],RANK() over (order by [LoadID] DESC) r FROM yourTable) SELECT * FROM TblCTE WHERE r=1
Вы можете сделать это
declare @T table (EmpID int, Rating int, LoadID int) insert into @T values ( 1, 5, 100), ( 1, 7, 101), ( 1, 8, 102), ( 2, 6, 100), ( 2, 6, 101), ( 3, 4, 102) select T.* from @T as T where LoadID in (select max(LoadID) from @T)
Вы можете объявить переменную или использовать вложенный запрос:
Следующее не проверено и может иметь синтаксические ошибки:
SELECT t.[EmpId] ,t.[Rating] ,t.[LoadID] FROM yourTable t WHERE LoadId = ( SELECT TOP 1 t.[LoadID] FROM yourTable t ORDER BY t.[LoadID] DESC )