2011-02-03 5 views
3

내 제목이 아마도 내 상황을 잘 설명하지 못한다는 것을 알지만 솔직히 말하면 어떻게해야할지 모릅니다.SQL은 특정 열에 대한 행의 첫 번째 레코드를 선택합니다.

SQL을 사용하여 DB2 데이터베이스에 액세스하고 있습니다.

아래 참고로 내 스크린 샷을 이미지 1 사용 : 1 "U11124"의 세 가지 인스턴스가

열, 세 가지 다른 설명 (2 열)와 나는이 쿼리를 반환하고 싶은

"U11124"의 첫 번째 인스턴스와 해당 설명이 있지만 다른 행의 고유 레코드도 포함됩니다. 이미지 2는 내 원하는 결과를 보여줍니다.

의 질문들에 응답하도록 2

image2

EDIT ----- ----

화상 1

image1 화상

/posts : 기술적으로 볼 때 첫 번째 레코드 일 필요는 없습니다. 문제는 우리가 세 가지 묘사가 있고 오직 하나만 보여줄 필요가 있다는 것입니다, 나는 이제 그것이 어느 것이 든 문제가되지 않는다고 말했습니다. SQL 서버에서 what_you_want_first

+2

어떤 데이터베이스를 : 당신이 다음은 충분 가장 높은 순서 값으로 주문하려는 경우 그럼 당신은 그러나, 다른 열없이 행의 순서를 guarntee 수없는 이유는 무엇입니까? SQL 서버? 신탁? MySQL은? – Blorgbeard

+1

보관할 행을 어떻게 결정합니까? –

답변

5
SELECT STVNST, MAX(STDESC) FROM MY_TABLE GROUP BY STVNST; 
+0

MAX는 첫 번째 값을 가져 오지 않고 최상위 값만 가져옵니다. –

+0

그래, 아마도 MIN을 실제로 원할거야. – Blorgbeard

+1

+1. 첫 번째에 대한 OP의 요구 사항을 정의 할 때 욕망이 알파벳순 인 경우 MAX 또는 MIN이 될 수 있습니다. –

2

SELECT STVNST,FIRST(STDESC) from table group by STVNST ORDER :

select stvnst, stdesc 
from (
    select  
    stvnst, stdesc 
    row_number() over (order by stdesc partition by stvnst) row 
    from table 
) a 
where row = 1 

이 방법은 점에서 그것은 또한 두 개 이상의 열이있을 때 작동에 의해 간단하게 그룹을 통해 장점을 가지고 탁자.

+0

미안하지만 (지금까지는) 명확히하지 않았습니다. . SQL을 사용하여 DB2 데이터베이스에 액세스하고 있습니다. 나는이 FIRST (stdesc)를 시도했지만 FIRST 명령이 없다는 오류 메시지가 나타납니다. = [ – Adam

+0

어느 RDBMS가 먼저 지원됩니까? –

3

BY

+0

아,하지만 DB2에서는 작동하지 않을 것 같습니다. – Blorgbeard

+1

+1 예, 버전에 따라 다릅니다. 이 게시물을 참조하십시오 : http://stackoverflow.com/questions/4879832/conditional-db2-sql-query/4882490#4882490 –

+0

게시물에 "행"하위 선택에서 쉼표가 있습니다. 이로 인해 내 쿼리에서 오류가 발생했습니다. 쉼표를 제거하면 문제가 해결되었습니다. – Nick

1

GROUP BY를 사용하면됩니다.

STDESC 열의 첫 번째 인스턴스를 원한다고하겠습니다.

SELECT STVNST, MAX(STDESC) FROM MY_TABLE GROUP BY STVNST; 
관련 문제