분석 함수를 사용하여 동일한 테이블에서 다음으로 가장 최근의 타임 스탬프를 찾는 방법

기피 가이

현재 셀프 조인을 사용하여 주어진 행에 대해 다음으로 가장 최근의 타임 스탬프를 계산하고 있습니다.

SELECT t.COLUMN1,
       t.SOME_OTHER_COLUMN,
       t.TIMESTAMP_COLUMN,
       MAX(pt.TIMESTAMP_COLUMN) AS PREV_TIMESTAMP_COLUMN
FROM Table1 t
LEFT JOIN Table1 pt ON pt.COLUMN1 = t.COLUMN1
                   AND pt.TIMESTAMP_COLUMN < t.TIMESTAMP_COLUMN
                   AND pt.SOME_OTHER_COLUMN = SOME_LITERAL_VALUE
GROUP BY t.COLUMN1,
         t.SOME_OTHER_COLUMN,
         t.TIMESTAMP_COLUMN

문제는 다중 비교를 위해이 작업을 여러 번 수행해야한다는 것입니다. 여러 개의 중첩 된 자체 조인이 필요하며 코드는 매우 추하고 실행 속도가 매우 느릴 것입니다.

이 같은 일을 어떻게 수행하지만 대신 분석 함수를 사용합니까?
코드를 작성하기 시작했지만 잘못된 것 같습니다.

SELECT DISTINCT t.COLUMN1,
                t.SOME_OTHER_COLUMN,
                t.TIMESTAMP_COLUMN,

                MAX(CASE WHEN t.TIMESTAMP_COLUMN < t.TIMESTAMP_COLUMN
                          AND t.SOME_OTHER_COLUMN = SOME_LITERAL_VALUE
                         THEN t.TIMESTAMP END) OVER
                    (PARTITION BY t.COLUMN1) AS PREV_TIMESTAMP_COLUMN1,

                MAX(CASE WHEN t.TIMESTAMP_COLUMN < t.TIMESTAMP_COLUMN
                          AND t.SOME_OTHER_COLUMN = SOME_OTHER_LITERAL_VALUE
                         THEN t.TIMESTAMP END) OVER
                    (PARTITION BY t.COLUMN1) AS PREV_TIMESTAMP_COLUMN2

FROM Table1 t

내가 본하자마자 WHEN t.TIMESTAMP_COLUMN < t.TIMESTAMP_COLUMN나는 생각했다 ... "이 잘 될 수 없다"

와 같은 분석 함수를 사용하는 다른 방법이 많이 있다는 것을 알고 있지만 분석 함수를 ROWS UNBOUNDED PRECEDING처음 사용하고이를 구현하는 방법을 모릅니다.

이를 위해 분석 함수를 사용하는 가장 좋은 방법은 무엇입니까?

GMB

다음과 같이 프레임 사양으로 조건부 창 최대 값을 수행 할 수 있다고 생각합니다.

SELECT DISTINCT
    COLUMN1,
    SOME_OTHER_COLUMN,
    TIMESTAMP_COLUMN,
    MAX(CASE WHEN SOME_OTHER_COLUMN = 'SOME_LITERAL_VALUE' THEN TIMESTAMP_COLUMN END) 
        OVER(
            PARTITION BY COLUMN1 
            ORDER BY TIMESTAMP_COLUMN
            ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING
        ) PREV_TIMESTAMP_COLUMN
FROM Table1 t

이렇게하면이를 구비 이전 기록에서 가장 큰 타임 스탬프를 얻을 것이다 COLUMN1, 그리고 그 SOME_OTHER_COLUMN원하는 litteral 값과 같습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관