SAS SQL基于条件左联接,不删除表A中的行

SAS SQL基于条件左联接,不删除表A中的行,sql,sas,left-join,Sql,Sas,Left Join,我有两个表,希望根据特定的条件将表B左连接到A 联接基于'ID'(a.ID=b.ID),但是如果b.status\u date>=a.date,我只想从表b中引入两列'status\u date'和'flag\u y' 表A: +------------+-----+--------+ | date | ID | Flag_x | +------------+-----+--------+ | 01/03/2019 | 100 | x | | 01/03/2019 | 1

我有两个表,希望根据特定的条件将表B左连接到A

联接基于'ID'(a.ID=b.ID),但是如果b.status\u date>=a.date,我只想从表b中引入两列'status\u date'和'flag\u y'

表A:

+------------+-----+--------+
|    date    | ID  | Flag_x |
+------------+-----+--------+
| 01/03/2019 | 100 | x      |
| 01/03/2019 | 101 | x      |
| 02/03/2019 | 102 | x      |
| 02/03/2019 | 103 | x      |
+------------+-----+--------+
+-------------+---------+--------+
| status_date | field_x | Flag_y |
+-------------+---------+--------+
| 15/03/2019  |     100 | y      |
| 10/01/2019  |     102 | y      |
+-------------+---------+--------+
+------------+-----+--------+-------------+--------+
|    date    | ID  | Flag_x | status_date | Flag_y |
+------------+-----+--------+-------------+--------+
| 01/03/2019 | 100 | x      | 15/03/2019  | y      |
| 01/03/2019 | 101 | x      |             |        |
| 02/03/2019 | 102 | x      |             |        |
| 02/03/2019 | 103 | x      |             |        |
+------------+-----+--------+-------------+--------+
表B:

+------------+-----+--------+
|    date    | ID  | Flag_x |
+------------+-----+--------+
| 01/03/2019 | 100 | x      |
| 01/03/2019 | 101 | x      |
| 02/03/2019 | 102 | x      |
| 02/03/2019 | 103 | x      |
+------------+-----+--------+
+-------------+---------+--------+
| status_date | field_x | Flag_y |
+-------------+---------+--------+
| 15/03/2019  |     100 | y      |
| 10/01/2019  |     102 | y      |
+-------------+---------+--------+
+------------+-----+--------+-------------+--------+
|    date    | ID  | Flag_x | status_date | Flag_y |
+------------+-----+--------+-------------+--------+
| 01/03/2019 | 100 | x      | 15/03/2019  | y      |
| 01/03/2019 | 101 | x      |             |        |
| 02/03/2019 | 102 | x      |             |        |
| 02/03/2019 | 103 | x      |             |        |
+------------+-----+--------+-------------+--------+
所需输出:

+------------+-----+--------+
|    date    | ID  | Flag_x |
+------------+-----+--------+
| 01/03/2019 | 100 | x      |
| 01/03/2019 | 101 | x      |
| 02/03/2019 | 102 | x      |
| 02/03/2019 | 103 | x      |
+------------+-----+--------+
+-------------+---------+--------+
| status_date | field_x | Flag_y |
+-------------+---------+--------+
| 15/03/2019  |     100 | y      |
| 10/01/2019  |     102 | y      |
+-------------+---------+--------+
+------------+-----+--------+-------------+--------+
|    date    | ID  | Flag_x | status_date | Flag_y |
+------------+-----+--------+-------------+--------+
| 01/03/2019 | 100 | x      | 15/03/2019  | y      |
| 01/03/2019 | 101 | x      |             |        |
| 02/03/2019 | 102 | x      |             |        |
| 02/03/2019 | 103 | x      |             |        |
+------------+-----+--------+-------------+--------+
我在下面尝试的代码删除了ID 102的行,在这种情况下,我想保留这一行,但不从表B中引入信息,因为“status\u date”在表A中的“date”之前。我假设需要在where子句中添加一些内容

PROC SQL;
Create Table Output As 
Select
a.*
,b.status_date
,b.flag_y

From Table_A as a
Left join Table_B as b
On b.ID = a.ID

Where b.status_date is Null or b.status_date >= a.date

;QUIT;
希望这是有意义的,有人可以帮助你,请尝试一下

SELECT 
  a.*
  ,b.status_date
  ,b.flag_y
FROM 
   Table_A as a
 LEFT JOIN Table_B as b
   ON b.ID = a.ID
   AND b.status_date >= a.date
请试试这个

SELECT 
  a.*
  ,b.status_date
  ,b.flag_y
FROM 
   Table_A as a
 LEFT JOIN Table_B as b
   ON b.ID = a.ID
   AND b.status_date >= a.date

您应该将日期筛选器添加到join子句中。您应该将日期筛选器添加到join子句中。因此,就这么简单!我有点困惑,因为在SAS Hadoop中尝试非常类似的东西时,它不喜欢日期条件。不管怎么说,这将是另一个要问的问题,因为事情就这么简单!我有点困惑,因为在SAS Hadoop中尝试非常类似的东西时,它不喜欢日期条件。无论如何,这将是另一个要问的问题