2010-07-21 69 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; 
相关问题