Hallo Leute,
ich habe ein Problem bei einem SQL Select, wo ich am verzweifeln bin
Autos können über einen Auftrag von einem Startzeitpunkt bis zu einem Endzeitpunkt reserviert werden.
Um einen Auftrag anlegen zu können, muss ich vorher wissen welcher Wagen frei ist. Ich will daher alle freie Wagen einer bestimmten Kategorie selektieren, für die "kein" Auftrag im übergebenen Zeitbereich vorliegt.
Im Anhang sind die 3 Tabellen zum besseren Verständnis.
Es ist ein Auftrag für den Wagen mit der ID=1 und der Category ID = 1 vorhanden, der als Starttermin den 22.3 und als Endtermin den 28.3 hat.
Wenn ich jetzt meinen Select mit Startdatum = 23.3 und Endedatum = 29.3 eingebe, bekomme ich alle Wagen außer den mit der ID = 1. Was ja auch richtig ist. Ändere ich das Startdatum im Select z. b. auf den 24.3 und das Enddatum auf den 27.3 wird auch der Wagen mit der ID = 1 ausgegeben - was ja falsch ist, weil der Wagen zu dem Zeitpunkt reserviert ist. Die Bedingung greift nicht. Wie lautet es richtig und was ist falsch an dem Statement? Oder stimmt mein Modell nicht und der Select ist damit garnicht möglich? Ich hab schon einige Sachen ausprobiert, aber immer das gleiche Problem.
Nachfolgend ist mein Statement gegeben:
Danke im Voraus für Eure Hilfe!
ich habe ein Problem bei einem SQL Select, wo ich am verzweifeln bin
Autos können über einen Auftrag von einem Startzeitpunkt bis zu einem Endzeitpunkt reserviert werden.
Um einen Auftrag anlegen zu können, muss ich vorher wissen welcher Wagen frei ist. Ich will daher alle freie Wagen einer bestimmten Kategorie selektieren, für die "kein" Auftrag im übergebenen Zeitbereich vorliegt.
Im Anhang sind die 3 Tabellen zum besseren Verständnis.
Es ist ein Auftrag für den Wagen mit der ID=1 und der Category ID = 1 vorhanden, der als Starttermin den 22.3 und als Endtermin den 28.3 hat.
Wenn ich jetzt meinen Select mit Startdatum = 23.3 und Endedatum = 29.3 eingebe, bekomme ich alle Wagen außer den mit der ID = 1. Was ja auch richtig ist. Ändere ich das Startdatum im Select z. b. auf den 24.3 und das Enddatum auf den 27.3 wird auch der Wagen mit der ID = 1 ausgegeben - was ja falsch ist, weil der Wagen zu dem Zeitpunkt reserviert ist. Die Bedingung greift nicht. Wie lautet es richtig und was ist falsch an dem Statement? Oder stimmt mein Modell nicht und der Select ist damit garnicht möglich? Ich hab schon einige Sachen ausprobiert, aber immer das gleiche Problem.
Nachfolgend ist mein Statement gegeben:
Code:
DECLARE @start VARCHAR(50) DECLARE @end VARCHAR(50) SET @start = '24.03.2010 23:59:59' SET @end = '26.03.2010 23:59:59' SELECT Car.ID, Car.CarNumber FROM Car INNER JOIN Category ON Car.CategoryID = Category.ID WHERE Car.ID NOT IN -- Selektiere alle Aufträge in der übergebenen Zeitspanne (SELECT [Order].CarID FROM [Order] WHERE ([Order].StartDate BETWEEN CONVERT(DATETIME, @start, 104) AND CONVERT(datetime, @end, 104)) OR ([Order].EndDate BETWEEN CONVERT(DATETIME, @start, 104) AND CONVERT(datetime, @end, 104)) ) AND Category.ID = 1
Comment