2016-06-17 9 views
-1

患者who are active on date 2016-05-01 but not active on date 2016-06-01を探していましたが、患者はZ673032になります。私のクエリIDを検索しようとすると一定時間が経過しても追跡されません

pat_id dm_date 
------------------------------- 
Z672385 2016-05-01 00:00:00.000 
Z672385 2016-06-01 00:00:00.000 
Z672444 2016-05-01 00:00:00.000 
Z672444 2016-06-01 00:00:00.000 
Z672570 2016-05-01 00:00:00.000 
Z672570 2016-06-01 00:00:00.000 
Z672995 2016-05-01 00:00:00.000 
Z672995 2016-06-01 00:00:00.000 
Z673032 2016-05-01 00:00:00.000 

下の表を参照してください。

select A.pat_id 
from A 
where 
    A.dm_date = '2016-05-01' 
    and A.PAT_ID not in (select B.pat_id 
         from B 
         where B.dm_date = '2016-06-01') 

しかし、それはnullを返します。それは簡単なはずだけど...これについての光? 私はSQL Server Management Studioを使用しています。

+2

あなたのテーブル名は何ですか? "A"と "B"エイリアスですか?彼らは何ですか? – FLICKER

+0

テーブル名は何ですか? – Kld

+0

BETWEENステートメントを見てください。また、日付を< >と比較しても助かります – Oscar

答えて

1

エイリアスの前にテーブル名を含める必要があります。 demo fiddle

select A.pat_id 
from Table1 A 
where 
    A.dm_date = '2016-05-01' 
and A.PAT_ID not in (select B.pat_id 
        from Table1 B 
        where B.dm_date = '2016-06-01') 
0

チェックは日時スタンプを比較するとき、それは日付を解釈する方法については細心の注意することができ、この

SELECT a.pat_id 
FROM a 
     LEFT JOIN b 
       ON a.pat_id = b.pat_id 
WHERE a.dm_date BETWEEN '2016-05-01 00:00:00' AND '2016-05-01 23:59:59' 
     AND b.pat_date BETWEEN '2016-06-01 00:00:00' AND '2016-06-01 23:59:59' 

SQL Serverのようにそれ自体にテーブルを結合してみます。

関連する問題