SQL: Lücken/Überlappungen in Zeiträumen finden

pathomorph

Benutzer
Beiträge
11
Hallo zusammen

Ich haben 2 Tabellen:
1. Arbeitsverträge
2. Zuordnungen zu Gruppen

Beispiel Arbeitsverträge:

MitarbeiterId Von Bis Wochenstunden
1 01.01.2014 31.03.2014 20
1 01.04.2014 40

In der zweiter Tabelle stehen die Zuordnungen zu einer oder mehreren Gruppen:

MitarbeiterID GruppenID Von Bis Wochenstunden
1 1 01.01.2014 31.01.2014 40 --> hier ist er mit 20 Stunden mehr zugeordnet, als er beschäftigt ist
1 1 01.02.2014 31.03.2014 20 --> korrekt
1 2 15.02.2014 15.03.2014 20 --> hier ist er mit 20 Stunden mehr zugeordnet, als er beschäftigt ist
1 1 01.05.2014 31.08.2014 30 --> Es gibt eine Lücke vom 31.03. bis 30.04. und es fehlen 10 Stunden.


Ziel: Eine oder mehrere Abfrage zu gestalten, die fehlerhafte Zuordnungen anzuzeigen:
- Stundendifferenzen zw. Vertrag und Zuordnung
- Lücken in der Zuordnung
- Überlappungen


Brauch mal eine "geniale" Idee. Ziel ist eine Abfrage, keine Funktion und ohne Cursor-Zeugs..

Gruß
 
Werbung:
Wieso nicht? Hast du andere Vorschläge? Es geht prinzipiell ja um die Gestaltung der SQL-Abfrage.. Der Server ist in dem Fall egal...

Ich würde da gleich Range-Typen nehmen, also DATERANGE. Damit läßt sich sehr angenehm arbeiten. Das hat aber M$-SQL nicht.
Wenn ich Dir also jetzt paar Queries zusammenbaue, werden diese bei Dir NICHT funktionieren. Kann ich mir also sparen ;-)
 
Das geht natürlich auch ohne DATERANGE problemlos, ist aber in beiden Fällen recht komplex. Für die Fälle mit den falschen Wochenstunden müsste folgendes auf die Schnelle Ergebnisse liefern:
Code:
SELECT    v.*,
        z.*
FROM    arbeitsverträge v
FULL OUTER JOIN zuordnungen z
ON        v.MitarbeiterId = z.MitarbeiterID
AND    (    z.Von BETWEEN v.Von AND v.Bis
OR        z.Bis BETWEEN v.Von AND v.Bis )
WHERE    v.Wochenstunden != z.Wochenstunden
Ist aber etwas ekelig das ohne echte Tabellen zu testen, probier mal ob das Sinn ergibt.
 
Werbung:
Zurück
Oben