2012-02-02 4 views
0

쿼리에 문제가있는 경우 마지막 변경 사항이 기록 된 시간을 기반으로 결과의 순위를 지정합니다.ROW_NUMBER 및 PARTITION 쿼리가 1로 순위가 매겨진 모든 행을 반환합니다.

SELECT 
    ROW_NUMBER() OVER (PARTITION BY ph.pricingHistoryId ORDER BY ph.changeRecorded DESC), 
    ph.* 
FROM 
    PriceHistory ph 

순위에 대해 모두 1을 반환합니다.

+0

ph.pricingHistoryId가 고유합니까? 행 번호는 각 파티션에 적용되고 다음 파티션에 대해 재설정됩니다. – Glenn

+0

예, 고유합니다 - 테이블의 기본 키 – Sam

+1

그런 다음 번호를 매기고 싶은 그룹을 파티션해야합니다. 전체 세트 인 경우 전체 "PARTITION BY ph.pricingHistoryId"부분을 제거하십시오. – Glenn

답변

4

pricingHistoryId이 기본 키인 경우 반복되는 기본 키가 없으므로이 키를 사용하여 파티션을 지정하면 항상 순위가 1로 반환됩니다!

1

행 번호가 각 파티션에 적용되고 다음 파티션을 위해 재설정됩니다. 번호를 매기고 싶은 그룹을 "분할"해야합니다. 전체 결과 집합에 대해 하나의 시퀀스를 원한다면 "PARTITION BY ph.pricingHistoryId"를 완전히 제거하고 "ORDER BY"부분 만 유지하십시오.

0

@Akhil과 동의합니다. ph.pricingHistoryId가 고유하다는 의미입니다.