현재 셀프 조인을 사용하여 주어진 행에 대해 다음으로 가장 최근의 타임 스탬프를 계산하고 있습니다.
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
처음 사용하고이를 구현하는 방법을 모릅니다.
이를 위해 분석 함수를 사용하는 가장 좋은 방법은 무엇입니까?
다음과 같이 프레임 사양으로 조건부 창 최대 값을 수행 할 수 있다고 생각합니다.
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] 삭제
몇 마디 만하겠습니다