2010-07-21 4 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 예

, IDS 8, 7, 6이며, I는 상태 열에 irelevant이다

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

될 제

동등한 SQL 쿼리와 행 필요는 단지 atribute있어 .

이와 비슷한 항목에 대한 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

상태는 irelevant입니다. 그것은 단지 atribute 코드이고 id는 어떤 metters입니까! 하지만이 중 하나를 사용하려고합니다. – 100r

+0

죄송합니다. 질문을 잘못 읽었습니다. 결정된. –

+0

흥미로운 일이 발생합니다. 내 쿼리는 110345 행을 반환합니다. 너의 결과는 110346 행입니다. :/ 이유를 모릅니다. – 100r

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; 
관련 문제