扩展日期范围时,SQL查询返回不同的结果

时间:2017-06-23 15:06:24

标签: sql

我有两个表,为了简单起见,请调用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

1 个答案:

答案 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;