Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

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

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von pathomorph, 18 Juni 2014.

  1. pathomorph

    pathomorph Benutzer

    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ß
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Das muß M$-SQL - Server sein, ja?
     
  3. pathomorph

    pathomorph Benutzer

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

    akretschmer Datenbank-Guru

    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 ;-)
     
  5. ukulele

    ukulele Datenbank-Guru

    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.
     
  6. pathomorph

    pathomorph Benutzer

    Danke Dir.. Ich bau das mal um und ein..
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden