![]() |
Re: freien Belegungszeitraum ermitteln
Was Du so alles wissen willst. :lol: Probiere es doch mal mit einer Kombination aus beidem:
SQL-Code:
select distinct raum
from Belegung where Raum not in (select Raum from Belegung where '10.01.2004' between anfang and ende or '22.01.2004' between anfang and ende or ende between '10.01.2004' and '22.01.2004' or anfang between '10.01.2004' and '22.01.2004'); |
Re: freien Belegungszeitraum ermitteln
Also, da find ich meine Idee aber irgendwie... naja, kürzer :gruebel:
|
Re: freien Belegungszeitraum ermitteln
So funktionierts bei mir:
SQL-Code:
Gruß,
select raum
from Belegung where raum not in ( select raum from Belegung where ((:von between anfang and ende) or (:bis between anfang and ende) or (:von <= anfang and :bis >= anfang) or (:von <= anfang and :bis >= ende))) Marcel |
Re: freien Belegungszeitraum ermitteln
Zitat:
|
Re: freien Belegungszeitraum ermitteln
Das Problem an meiner vorherigen Lösung war, dass Einträge, die vor :StartTm begannen/ nach :EndTm endeten, nicht erfasst wurden.
Versuch's mal so:
SQL-Code:
Kam hier aber bestimmt schon in irgendeinem Posting vor.
SELECT DISTINCT t.Raum
FROM T_Daten t WHERE t.Raum NOT IN (SELECT x.Raum FROM T_Daten x WHERE (x.Anfang BETWEEN :StartTm AND :EndTm OR x.Ende BETWEEN :StartTM AND :EndTm) OR x.Anfang <= :StartTm AND x.Ende >= :StartTm) @Treffnix Mach's dir nicht zu einfach - es wird nicht funktionieren. Was ist wenn das Enddatum kleiner als :EndTm aber größer als :StartTm ist? |
Re: freien Belegungszeitraum ermitteln
Zitat:
Dann ist Ende grösser als 14.01.2004 und passt somit ins Where-Statement, oder steh ich jetzt aufm Schlauch? Mal ein paar Beispiele, die eigentlich alle Fälle abdecken sollten: Annahme: StartTm = 12.01.2004, EndTm = 16.01.2004
SQL-Code:
Where Start <=:EndTm And Ende >=:StartTm
Code:
*edit* da fehlten noch doppelpunkte *edit*
Start Ende
10.01. - 19.01. Where 12.01.2004 <= 19.01.2004 And 16.01.2004 >= 10.01.2004 True 13.01. - 15.01. Where 12.01.2004 <= 15.01.2004 And 16.01.2004 >= 12.01.2004 True 10.01. - 15.01. Where 12.01.2004 <= 15.01.2004 And 16.01.2004 >= 10.01.2004 True 15.01. - 21.01. Where 12.01.2004 <= 21.01.2004 And 16.01.2004 >= 15.01.2004 True 09.01. - 10.01. Where 12.01.2004 <= 10.01.2004 And 16.01.2004 >= 09.01.2004 False ( links ) 18.01. - 20.01. Where 12.01.2004 <= 20.01.2004 And 16.01.2004 >= 18.01.2004 False ( rechts ) *edit2* 2 Werte vertauscht *edit2* |
Re: freien Belegungszeitraum ermitteln
Sorry TreffNix, hab' mich verguckt... :pale:
Anscheinend hast du vollkommen recht. Mann (:wall: :wall: :wall: :wall:), manchmal müsste ich akutes Post-Verbot kriegen. :duck: (Manchmal denkt man, die Lösung sei kompliziert - also macht man sie auch kompliziert...) Wenn TreffNix' Lösung bei dir nicht funktioniert dann liegt das ganz einfach an impliziter Umwandlung von String zu Datum. Füge nicht " '14.01.2003' " in deine Abfrage ein, sondern verwende Variablen, die du als Datum definierst. Denn implizite Umwandlung bedeutet einen ziemlichen CPU-Overhead auf dem Server. |
Re: freien Belegungszeitraum ermitteln
Hallo GeorgeWNewbie,
ich habe jetzt erst die Tests fahren können und es sieht sehr sehr gut aus. Vielen Dank, auch für die Beiträge von den Anderen. :hello: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz