Problem: Datum vergleichen

Daphne

Neuer Benutzer
Beiträge
4
Hallo Zusammen,

ich will einfach nur, dass zwei Daten (DATE, YYYY-MM-DD) miteinander verglichen werden und wenn Date2 kleiner als Date1 ist, solls rausgeschmissen werden (hab die 2 Tabellen vorher geleftjoint, alles gut):

WHERE v_c.Date1 <= ANY (SELECT v_sp.Date2 FROM bi_staging.s_stud_pat as v_sp WHERE v_sp.Date2 is not null)

Er schmeißt zwar welche raus, aber völlig unkontrolliert (meiner Meinung nach).
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.702
Ich habe ANY noch nie verwendet. Würde nicht
WHERE v_c.Date1 <= (SELECT min(v_sp.Date2) FROM bi_staging.s_stud_pat as v_sp WHERE v_sp.Date2 is not null)
das tun, was du willst?
 

Daphne

Neuer Benutzer
Beiträge
4
Vielen Dank für die Antwort.
Wenn ich aber mit "min" arbeiten würde, holt er mir in der Select-Anweisung ja nur einen Wert. Ich brauch den Vergleich aber für alle, insgesamt sinds ca. 24.000.
 

ukulele

Datenbank-Guru
Beiträge
4.702
Sry ich meinte max(v_sp.Date2)

---
CREATE TABLE T1 (ID int) ; GO INSERT T1 VALUES (1) ; INSERT T1 VALUES (2) ; INSERT T1 VALUES (3) ; INSERT T1 VALUES (4) ;
Die folgende Abfrage gibt TRUE zurück, da 3 kleiner als einige der Werte in der Tabelle ist.


IF 3 < SOME (SELECT ID FROM T1) PRINT 'TRUE' ELSE PRINT 'FALSE' ;

Quelle: http://msdn.microsoft.com/de-de/library/ms175064.asp

---

Also wenn ich das richtig verstehe, vergleichst du einen Wert mit einer Werteliste. Ist dein Wert kleiner oder gleich einer der Werte in der Liste trifft die Bedingung zu. Da der Wert nicht gleich sein muss sondern auch kleiner sein kann als ein beliebiger Wert in der Liste kannst du auch schauen, ob er kleiner oder gleich dem größten Wert in der Liste ist, das müsste nach meinem Verständniss das selbe Ergebniss liefern.
 

Daphne

Neuer Benutzer
Beiträge
4
Ha... du hast voll recht: Ich habe einen Wert aus einer Spalte mit allen Werten aus der anderen verglichen. Oh man...
Wenn ich die SELECT-Abfrage entferne, passts. Aber dann vergleicht er nur die, wo bei beidem ein Datum drin steht. Das soll er aber unbedingt nicht machen!
Kann ich ihm irgendwie sagen, dass er die Bedingung "v_c.date1<= v_sp.date2" nur ausführen soll, wenn date2 is not null?
 

ukulele

Datenbank-Guru
Beiträge
4.702
Na klar:
Code:
WHERE (    v_c.date1 IS NOT NULL
AND        v_sp.date2 IS NOT NULL
AND        v_c.date1 <= v_sp.date2
OR        v_sp.date2 IS NULL
OR        ... )
AND    weitere....
Auf die Klammerung kommt es an.
 
Werbung:
Oben