2016-06-17 5 views
-1

Ich habe versucht, Patienten who are active on date 2016-05-01 but not active on date 2016-06-01 zu finden, die der Patient sein wird Z673032. Siehe Tabelle untenVersuchen ID zu finden ist nicht aktiv zu einer bestimmten Zeit, um im Laufe der Zeit zu verfolgen

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 

Meine Frage:

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') 

Aber es gibt Null. Es sollte einfach sein, aber ... Irgendein Licht auf diesem? Ich verwende SQL Server Management Studio.

+2

Wie lautet Ihr Tabellenname? Sind "A" und "B" Alias? was sind Sie? – FLICKER

+0

Wie lautet Ihr Tabellenname? – Kld

+0

Werfen Sie einen Blick auf BETWEEN Aussage. Auch das Vergleichen von Daten mit < > könnte helfen – Oscar

Antwort

1

Sie müssen den Tabellennamen vor dem Alias ​​enthalten.

prüfen 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

Versuchen Sie, die Tabelle auf sich selbst wie dieser Server

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 Verbindung kann über pingelig sein, wie es die Daten interpretiert, wenn in Datetime Briefmarken zu vergleichen.

Verwandte Themen