2011-03-01 17 views
1

這裏是我的表:僅獲得最新的(總)負荷的行

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

這裏的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

謝謝,工作就像一個魅力! – tonson7 2011-03-01 12:00:34

+0

這真是太棒了! – FarligOpptreden 2011-03-01 12:02:28

0

你可以聲明一個變量或使用嵌套查詢:

以下是未經測試,並有可能語法錯誤:

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 
    ) 
+1

這是一個有點冗長,子查詢可能使其有點慢。我建議使用CTE。 – FarligOpptreden 2011-03-01 11:29:25

+0

你說得對,嵌套查詢當然不夠優雅。這就是Entity Framework對大腦的SQL區域所做的事情。 – StuperUser 2011-03-01 11:33:08

+0

原諒我的noobness ...我如何使用CTE做到這一點? – tonson7 2011-03-01 11:36:13

0

你可以做到這一點

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

這裏去同一個使用CTE

;WITH TblCTE as(
SELECT [EmpId],[Rating],[LoadID],RANK() over (order by [LoadID] DESC) r 
FROM yourTable) 
SELECT * FROM TblCTE WHERE r=1