【发布时间】:2020-02-05 20:05:42
【问题描述】:
我有一个表 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 喜欢:
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
谁能告诉我如何才能得到这个结果?
【问题讨论】:
-
是您从查询中得到的结果,还是您想要从查询中得到的结果..?
-
更新了我正在寻找的预期结果,而不是 NULL 值,我正在寻找 2016-09-30 的后备值,这是 TBL_B 中的最后一个可用值
标签: sql sql-server-2008 select where-clause fallback