Получать строки только последней (общей) загрузки - PullRequest
1 голос
/ 01 марта 2011

Вот мой стол:

EmpID | Rating | LoadID
-----------------------
  1       5        100
  1       7        101
  1       8        102
  2       6        100
  2       6        101
  3       4        102

Мне нужно выбрать только строки для последней (общей) LoadID. Исходя из вышеизложенного, последний (общий) LoadID равен 102, поэтому мне нужно иметь этот набор результатов:

EmpID | Rating | LoadID
-----------------------
  1        8      102
  3        4      102

Ответы [ 4 ]

4 голосов
/ 01 марта 2011

Вот пример того, как сделать это с помощью 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
0 голосов
/ 01 марта 2011

Здесь то же самое, используя CTE

;WITH TblCTE as(
SELECT  [EmpId],[Rating],[LoadID],RANK() over (order by [LoadID] DESC) r
FROM    yourTable)
SELECT  * FROM TblCTE WHERE r=1
0 голосов
/ 01 марта 2011

Вы можете сделать это

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)
0 голосов
/ 01 марта 2011

Вы можете объявить переменную или использовать вложенный запрос:

Следующее не проверено и может иметь синтаксические ошибки:

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
    )
...