2017-06-23 16 views
0

私は2つのテーブルを持っていますが、簡単にするためにTable1とTable2を呼び出します。どちらもIDと日付の2つのカラムを持っています。私は以前の日付の下にTable2でIDが見つかったTable1のすべての行をフィルタリングしたいと思います。例えば日付範囲を拡張すると異なる結果を返すSQLクエリ

表1:

ID Date 
X 20170105 
Y 20170304 

表2:ID Xは、前の日付で表2に発生するので

ID Date 
X 20161230 
Y 20170306 

所望の出力は、日付20170304とID Yであろう。

私はこのコードを2回実行しました。1年に1回、4月に1回、月ごとに分けました。何らかの理由で、私は別の結果を得ています。通年の

コード:

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月のコードでは、参加のON節へWHERE句から日付条件を移動してみてください

a.date between 20170401 and 20170430 
+0

サプライズ、驚き!クエリを変更すると、異なる結果が返されます。/sarcasm_off ...あなたが提供したサンプルデータでは、1番目のクエリは1月の行を返し、2番目の0の行は***という4月の日付がないため***を返します。 _実際にあなたが見せてくれたことのないデータの違いを指していると仮定します。_予想外の結果を見せても気にしないときに、人々があなたを助けてくれることを期待してください。 (間違った結果を生み出す可能性のあるその特定の機能の危険性を理解していないかもしれないと思うかもしれません)。 –

答えて

1

除いてまったく同じです:

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; 
関連する問題