2017-12-19 22 views
0

다음은 행의 최신 버전을 얻는 간단한 방법 중 하나입니다. 단일 행에 대해 '정상'작동을하는 동안 각 행을 평가해야 할 때 속도가 느려집니다.Redshift last_value 가장 최근 행을 검색합니다.

SELECT * 
FROM dev.A t1 
where to_char(last_operation_date,'yyyymmdd') = (select max(to_char(last_operation_date,'yyyymmdd')) 
               from dev.A t2 
               where t1.inte_id = t2.inte_id) 
and t1.inte_id = 'PPP2434' 
+1

'last_operation_date'의 데이터 유형은 무엇입니까? –

+0

timestamp ex- '2017-12-13 22:12:56' –

+0

"가장 최신 버전"이라는 요구 사항에 따라 타임 스탬프의 시간 부분을 무시함으로써 쿼리가 잘못되었다고 생각합니다. 쿼리는 최신 "가장 최근 버전"이 아닌 최신 날짜에 발생한 모든 행을 반환합니다. –

답변

0

당신은 상관 하위 쿼리를 사용하지 않고 inte_id 당 최신 행을 찾기 위해 ROW_NUMBER() 함수를 사용할 수 있습니다. 상관 관계가있는 서브 쿼리에는 종종 루프를 느리게하는 중첩 루프 단계가 필요합니다.

SELECT * 
FROM (
    SELECT * 
      ,ROW_NUMBER() OVER(PARTITION BY inte_id ORDER BY last_operation_date DESC) last_op_order 
    FROM dev.A t1 
    and t1.inte_id = 'PPP2434' 
    ) 
WHERE last_op_order = 1;