2016-08-02 2 views
1

다음과 같은 표가 있습니다.SQL 서버 - 열의 최대 값으로 검색을 제한하십시오.

version_number ID Value 
1     33 Foo 
2     33 Bar 
1     37 Foo 

ID가 33이고 최대 버전 번호 만 선택하면 테이블에서 값 필드를 어떻게 반환합니까? (이 경우, 2)

이와 비슷한 것;

SELECT Value FROM Table WHERE ID = 33 and MAX(version_number) 

편집 : 작업 아래에 모두 답변. Tim Schmelter의 대답은 조금 더 우아하다고 생각하기 때문에 나올 것입니다.하지만 투표를 모두 마쳤습니다. 고마워 : 당신은 이것에 대한 하위 쿼리를 사용할 수 있습니다

답변

3

SQL 서버에서 ROW_NUMBER, f.e.와 같은 순위 함수를 사용할 수 있습니다. CTE를 가진 :

WITH CTE AS 
(
    SELECT t.*, rn = Row_Number() Over (Partition By ID Order By version_number Desc) 
    FROM dbo.TableName t 
) 
Select Value From CTE 
WHERE ID = 33 
    AND rn = 1 
+0

을 붙여 넣으십시오.하지만 MAX가 지정된 값과 일치하도록해야합니다. 예를 들어 ID 33을 검색하면 version_number 2가있는 행이 표시되지만 ID 37을 검색하면 version_number 1이있는 행이 표시됩니다. –

+0

@RyanHargreaves : 그것은 그렇게 작동합니다. 항상 ID 당 최대 버전 번호에 속하는 행을 반환합니다 (ID 별 파티션으로 인해). 최소 버전을 얻으려면'version_number Desc'를'version_number Asc'로 변경하십시오. –

+0

죄송합니다, 당신의 말이 맞습니다, 주문을 잊어 버렸습니다. Desc. 감사 :) –

1

: 다음 필터링 된 데이터를 얻어서

입니다
SELECT Value FROM 
(SELECT TOP 1 * 
    FROM Table 
    WHERE ID = 33 
    ORDER BY version_number 
) as t 

, 시작은 원하는 열을 인쇄 할 수 있습니다.

+0

나는 가치없는 –

+0

@RyanHargreaves 오, 내가 볼 버전 번호를 반환합니다. 업데이트 된 답변 확인 – fedorqui

+0

LIMIT 키워드로 번역 할 때 구문 오류가 발생합니다. SQL 서버에 있습니까? –

관련 문제