2010-07-21 106 views
4

這是數據如何返回最大值爲一列的行按另一列分組?

id  code  status 
1   1   5 
2   1   6 
3   2   8 
4   2   9 
5   2   12 
6   3   15 
7   3   19 
8   3   13 

什麼,我需要的結果是這樣的:

id  code  status 
2   1   6 
5   2   12 
8   3   19 

換句話說,我需要人行與代碼編組最大的ID。

例如,用於碼3,ID是6,7,8和我需要8.

等效SQL查詢行將被

select * 
from t inner join (select max(id) maxId from t group by code) t1 
on t.id = t1.maxId 

狀態欄是irelevant,它只是一個屬性附加傷害。

什麼是這樣的linq查詢?

在此先感謝。

回答

3
from t in mytable 
where !(from tt in mytable 
     where tt.code == t.code && 
       tt.id > t.id 
     select tt 
     ).Any() 
select t 
+0

狀態是相關的。它只是一個屬性代碼,ID是什麼變化! 但我會盡量使用這個。 – 100r 2010-07-21 12:24:26

+0

對不起,我誤解了這個問題。固定。 – 2010-07-21 12:38:29

+0

有趣的事情發生。 我的查詢返回110345行 您的回報110346行 :/ 不知道爲什麼.. – 100r 2010-07-21 13:03:35

1

文字取一個優勝者

from row in rows 
group row by row.code into g 
let winner = 
(
    from groupedrow in g 
    order groupedrow by groupedrow.id desc 
    select groupedrow 
).First() 
select winner; 

更多傳統接一個影帝(無自動組元素提取往返機率)

var subquery = 
    from row in rows 
    group row by row.code into g 
    select new {Code = g.Key, Id = g.Max(row => row.Id)}; 

var query = 
    from row in rows 
    join key in subquery on new{row.Code, row.Id} == key 
    select row; 

完全匹配您發佈sql:

IQueryable<int> subquery = 
    from row in rows 
    group row by row.code into g 
    select g.Max(row => row.Id); 

var query = 
    from row in rows 
    join key in subquery on row.Id == key 
    select row; 
相關問題