2016-10-27 1 views
1

지난 며칠 동안 나는 쿼리를 실행하는 방법과 스택을했습니다. 카테고리가 먼저 상태를 변경하는 레코드 아래의 테이블에서 선택하고 싶습니다.카테고리 열에 동일한 클래스가있는 레코드의 하위 집합 (n = 1)을 선택하십시오.

Id Category Month 

1  Start  Jan 
2  Start  Feb 
3  Middle  Mar 
4  Middle  Apr 
5  End  May 

해당 테이블에서 나는 카테고리가 변경된 레코드 만 원합니다. 그래서 나는 SELECT에서 내 테이블을 그렇게하기를 원합니다.

Id Category Month 

1  Start  Jan 
3  Middle  Mar 
5  End  May 

제 질문에 대답 해 주셔서 미리 감사드립니다.

+0

추가 설명 : SQL Server를 사용하고 있습니다. 2014 –

답변

0

정확하게 이해했다면, 당신이 쓴 내용은 GROUP BY을 사용하여 달성 할 수 있습니다.

SELECT MIN(id) as ID, Category, MIN(Month) as Month 
FROM MyTable 
GROUP BY Category 
+0

닫기는 있지만 MIN (월)은 항상 그렇지 않을 수도 있습니다. 혹시. 대신 Min (id)는 카테고리에 대해 가장 오래된 행만 가져옵니다 (자동 증가라고 가정하는 ID 당) –

+0

아마도 OP의 질문에 주어진 것처럼 그것은 연대순 일 수 있습니다. 이 사양을 감안할 때 좀 더 복잡한 쿼리가 필요한 것은 확실하지 않습니다. 나는 이것이 사실인지 아닌지보기 위해 기다릴 것이다. – Santi

+0

고마워요. 네, 산티예요 내가하고 싶었던 것입니다 –

3

은 그 기록의 달 모든 범주에 대한 최소한의 ID를 잡아 당겨 얻을 : 당신의 id 열이 고유 경우

select 
    t1.id, t1.category, t2.month 
from (
    select category, min(id) as id 
    from yourtable 
    group by category 
) t1 
join t2 on t1.id = t2.id and t1.category = t2.category -- second may not be necessary 

은 다음 category와 조건이 필요하지 않습니다. 위의 코드는 최소 ID가있는 모든 카테고리에 대해 month 열에서 값을 가져옵니다.