我如何进行表联接,其中组合键是访问号和日期+/- 1天

问题描述 投票:0回答:1

我正在尝试进行表联接,其中组合键是访问号和快照日期,而感兴趣的数据是Status。这是简单连接的样子:

SELECT A.Access_Num, B.Access_Num, A.SNAPSHOT_DATE, B.SNAPSHOT_DATE, B.Status
FROM A
INNER JOIN B
ON A.Access_Num = B.Access_Numb AND A.SNAPSHOT_DATE = B.SNAPSHOT_DATE

[我的障碍是,在SNAPSHOT_DATE的精确匹配中(20%的时间)未填充感兴趣的数据状态Status。有时它与表A中的SNAPSHOT_DATE相差+/-1。仍然存在记录匹配,但表B只会返回NA。

[我正在尝试编写一个联接案例,以检查Status是否以NA返回,以查看Table_B前一天的组合键,以及第二天的组合键,以查看是否有有效值(即,不适用)。

在下表中,我希望查询能够识别出第3行返回一个NA,因此,它会在前一天或第二天查找有效值。它应该选择第4行具有非NA值,然后返回该值。

Row     A.Access_Num    B.Access_Num    A.SNAPSHOT_DATE    B.SNAPSHOT_DATE  B.STATUS
1       11              11              12-12-2018         12-12-2018       Y
2       11              11              12-13-2018         12-13-2018       Y
3       13              13              12-05-2018         12-05-2018       NA             
4       13              13                                 12-06-2018       Y
mysql sql case composite-primary-key
1个回答
0
投票

您可以在ON子句中使用不等式:

SELECT A.Access_Num, B.Access_Num, A.SNAPSHOT_DATE, B.SNAPSHOT_DATE, B.Status
FROM A INNER JOIN
     B
     ON A.Access_Num = B.Access_Numb AND
        A.SNAPSHOT_DATE >= B.SNAPSHOT_DATE - INTERVAL 1 DAY AND
        A.SNAPSHOT_DATE <= B.SNAPSHOT_DATE + INTERVAL 1 DAY ;
© www.soinside.com 2019 - 2024. All rights reserved.