Announcement

Collapse
No announcement yet.

verzwickte Abfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • verzwickte Abfrage

    Hey liebe Community,

    Ich hab eine Frage bezüglich einer Abfrage, auf deren Lösung ich nicht komme

    Ich habe 3 Tabellen in einer Derby-Datenbank: Aufträge, Kunden, Angestellte
    Ein Kunde kann mehrere Angestellte (etwa einen Fahrer) buchen, aber ein Angestellter kann während eines Zeitaums nur einmal gebucht werden.
    Ein Auftrag besteht aus: Auftragnummer, Buchung_von(Date), Buchung_bis(Date), Kunde, Angestellter
    Ein Angestellter besteht aus: Angestellten_ID, Fachgebiet, Gehalt usw.

    Da ich das ganze in einem Programm eingebunden habe, möchte ich beim Erstellen eines Auftrags der Abfrage ein Anfangs und ein End-Datum übergeben und möchte dann eine Liste aller Angestellten zurück haben, die während dieses Zeitraumes noch nicht verbucht sind..

    Bisher hatte ich nur folgende Abfrage:
    Code:
    SELECT * FROM APP.Angestellter WHERE Angestellter _ID NOT IN(SELECT APP.Angestellter .Angestellter _ID FROM APP.Angestellter INNER JOIN APP.AUFTRAEGE  ON APP.Angestellter .Angestellter _ID = APP.AUFTRAEGE.BG_NUMMER)");
    Damit erhalte ich aber alle Bodyguards die IM MOMENT noch nicht verbucht sind. Da können mir aber ganz schnell die Angestellten ausgehen, da ich deren nächsten Auftrag nicht buchen kann, solange sie noch in einem sind.
    Könntet ihr mir weiterhelfen?

    Dankeschön!

  • #2
    Hallo,

    du musst natürlich für die Abfrage den Zeitraum mit berücksichtigen, für den der Auftrag erstellt werden soll. Kann ja am Anfang und am Ende Überschneidungen geben. Aber das Problem ist nicht trivial und kaum mit einer einzelnen Abfrage lösbar, besonders wenn du auch Lücken berücksichtigen musst.
    Das Problem ist schon mehrfach mit Zimmerbuchungen diskutiert worden, also versuch mal dein Glück mit der Foren-Suche.

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Wie Falk sagte, muss man auf die Zeiten prüfen und zwar so:
      möglich sind alle Personen, die KEINE Buchung haben die folgende Bedingung erfüllt:
      Start der Buchung kleiner gleich Ende des neuen Auftrags UND Ende der Buchung größer gleich dem Start des neuen Auftrages.

      Das geht sich als zusätzliche WHERE-Klausel in deinem SELECT aus :-)

      bye,
      Helmut

      Comment

      Working...
      X