У меня есть таблица 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
Я пытаюсь получить набор результатов с помощью 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
Может кто-нибудь дать мне знать, как я могу получить этот результат?