다음과 같은 테이블 TBL_A가 있습니다.
CLASS_ID PERIOD_DT MAX_DT
-----------------------------------
358614 2018-09-30 2018-09-30
358614 2017-09-30 2018-09-30
358614 2016-09-30 2018-09-30
358614 2015-09-30 2018-09-30
358614 2014-09-30 2018-09-30
358614 2013-09-30 2018-09-30
및 TBL_B LIKE :
CLASS_ID CLASS_DT
----------------------
358614 2018-09-30
358614 2017-09-30
358614 2016-09-30
지난 6 년 동안 CLASS_DT로 결과 세트를 얻으려고하는데 일부 클래스에는 충분한 정보가 없습니다. 날짜를 사용할 수없는 경우 현재 기간 날짜에 가까운 사용 가능한 이전 데이터를 사용해야합니다. 그래서 내 최종 결과는
예상 결과 :
PERIOD_DT FALLBACK_CLASS_DT
-------------------------------
2018-09-30 2018-09-30
2017-09-30 2017-09-30
2016-09-30 2016-09-30
2015-09-30 2016-09-30 // fallback dates, since they are not available
2014-09-30 2016-09-30
2013-09-30 2016-09-30
그리고 내가 시도하는 쿼리는 다음과 같습니다.
SELECT A.PERIOD_DT,
(SELECT TOP 1 CAST(B.CLASS_DT AS DATE)
FROM TBL_B AS B
WHERE B.CLASS_ID = A.CLASS_ID
AND CAST(B.CLASS_DT AS DATE) <= CAST(A.PERIOD_DT AS DATE)
AND CAST(A.PERIOD_DT AS DATE) <= CAST(A.MAX_DT AS DATE)
ORDER BY B.CLASS_DT DESC) AS FALLBACK_CLASS_DT
FROM TBL_A AS A
WHERE A.CLASS_ID = 358614
ORDER BY A.PERIOD_DT DESC;
내가 얻는 결과는 다음과 같습니다.
PERIOD_DT FALLBACK_CLASS_DT
-------------------------------
2018-09-30 2018-09-30
2017-09-30 2017-09-30
2016-09-30 2016-09-30
2015-09-30 NULL
2014-09-30 NULL
2013-09-30 NULL
누구든지이 결과를 얻을 수있는 방법을 알려줄 수 있습니까?
나를 위해 일한 쿼리는 다음과 같습니다.
SELECT
A.CLASS_ID,
A.PERIOD_DT,
ISNULL((SELECT TOP 1 CAST(B.CLASS_DT AS DATE)
FROM TBL_B AS B
WHERE B.CLASS_ID = A.CLASS_ID
AND CAST(B.CLASS_DT AS DATE) <= CAST(A.PERIOD_DT AS DATE)
AND CAST(A.PERIOD_DT AS DATE) <= CAST(A.MAX_DT AS DATE)
ORDER BY B.CLASS_DT DESC
), B2.CLASS_DT) AS FALLBACK_CLASS_DT
FROM TBL_A AS A
LEFT JOIN (SELECT B.CLASS_ID, MIN(B.CLASS_DT) AS CLASS_DT
FROM TBL_B AS B
GROUP BY B.CLASS_ID) AS B2 ON B2.CLASS_ID = A.CLASS_ID
WHERE A.CLASS_ID = 358614
ORDER BY A.PERIOD_DT DESC;
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다