我有两个表,为了简单起见,请调用Table1和Table2。它们都有两列:ID和日期。我想过滤Table1中的每一行,其中在早期日期在表2中找到ID。
例如:
表1:
ID Date
X 20170105
Y 20170304
表2:
ID Date
X 20161230
Y 20170306
由于ID X出现在上一个日期的表2中,因此期望的输出将是ID Y,日期为20170304。
我运行了这个代码两次,一年一次然后将它分开几个月,一次只分发四月份。出于某种原因,我得到了不同的结果。
全年代码:
proc sql;
Create table whole_year as
Select distinct a.ID, a.date
From table1 a
Left join table2 b
On a.ID = b.ID and a.date > b.date
Where b.ID is null
And a.date >= 20170101;
Quit;
4月的代码完全相同,只有
a.date between 20170401 and 20170430
答案 0 :(得分:1)
尝试将日期条件从WHERE
子句移动到联接的ON
子句:
SELECT DISTINCT
a.ID, a.date
FROM table1 a
LEFT JOIN table2 b
ON a.ID = b.ID AND
a.date > b.date AND
a.date BETWEEN 20170401 AND 20170430
WHERE b.ID is null;