【发布时间】:2018-05-16 13:53:44
【问题描述】:
我有以下表格:
当我加入 TableB 时,我需要一行 CID。
加入条件:
表 A CID Start_dt 在 AreaStart_dt 之间
如果上面不匹配,当tablea.cid = tableb.cid时使用最新的AreaStart_dt
表A
CID Start_dt End_dt
1 1/1/18
2 5/1/18
表B
CID Areaid AreaStart_dt Area_End_dt
1 101 1/1/18 1/1/3000
1 102 1/1/17 12/31/17
2 201 4/1/18 4/29/18
2 301 3/1/18 3/30/18
输出:
CID Start_dt End_dt Areaid
1 1/1/18 101
2 5/1/18 201
SQL:
SELECT *
FROM TABLEA A
LEFT JOIN (SELECT
DENSE_RANK() OVER (PARTITION BY B.CID ORDER BY AREA_START_DT DESC) RNK
FROM TABLEB B
)TABLEB B ON A.CID = B.ID BETWEEN B.AREASTART_DT
AND B.AREA_END_DT OR A.CLIENTID = B.CLIENTID AND rnk = 1
【问题讨论】:
-
到目前为止你有什么?
-
CID 上的左连接会返回所有结果,然后我创建了一个带有 case 语句的子查询来计算 areaid。
-
更新以显示当前 SQL