Announcement

Collapse
No announcement yet.

T-SQL Abfrage - Problem

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

  • T-SQL Abfrage - Problem

    Guten Tag die Damen und Herren,

    ich habe ein kleines Problem mit einer SQL Query und wollte euch nach Hilfe fragen. Und
    zwar habe ich bei einer Zeiterfassung falsche Daten in der Datenbank und will diese jetzt
    herausfilter. Um die falschen Daten handelt es sich um überschneidente Zeiten was nicht
    möglich sein kann/darf.

    Nun, die Zeiterfassung arbeitet mit Gruppen. Jede Gruppe kann x Personen beinhalten und
    jede Person darf nur in einer Gruppe angemeldet sein. Nun sehe ich aber in der Datenbank das
    die Person y in der Gruppe 100 von 10:00 - 15:00, in der Gruppe 100 von 08:00 bis 11:00 und
    in der Gruppe 102 von 07:00 bis 12:00 gearbeitet hat. Das heißt die Zeiten überschneiden
    sich. Diese Daten will ich jetzt alle herausfilter.

    Den Größteil der Query hab ich bereits gebaut. Nun stehe ich aber vor einem Problem. Vorher
    beschreibe ich aber noch wie ich die Query bisher aufgebaut habe.
    Und zwar habe ich 2 Queries die sich alle Daten von den Personendaten holen. Sprich, zwei
    einfaches Selects. So, nun habe ich noch eine Query die die beiden Queries miteinander
    joined auf die Gruppennummer (groupid), die Personalnummer (personalId),das Datum (date)
    und ungleich der startzeit (personalTimeBegin).

    Nun habe ich alle Daten verknüpft die sich überschneiden könnten. In der Where Klausel
    überprüfe ich nun noch ob sich die Zeiten tatsächlich überschneiden. Dieses mache ich so:
    "endezeit2 > beginzeit1 und beginzeit1 < endzeit1 oder beginzeit2 > beginzeit1 und
    beginzeit2 < endzeit1" Jetzt habe ich alle Daten bei denen sich die Zeiten überschneiden. Das
    einzige Problem was ich jetzt noch hab ist das Problem bei dem ich anstehe. Und zwar
    werden durch den join alle Zeiten verknüpft die sich überschneiden könnten. Daher habe ich
    nun folgende Konstellation:

    Code:
    startZeit1  endZeit1  startZeit2  endZeit2  groupID  personalD 
    10:00        12:00       09:00        11:00       100         1 
    09:00        11:00       10:00        12:00       100         1
    Wie bekomme ich nun nur tatsächlich eine Zeile da die beiden Zeilen ja im Prinzip gleich
    sind?

    ps: Ich arbeite mit dem SQL-Server 2000

    Mit freundlichen Grüßen
    Dominik Pfaffenbauer

  • #2
    Hallo,

    da Du Dein komplettes SQL nicht postest, kann ich nur vermuten, dass wenn Du Deine oder Bedingung weglässt, das gewünschte Ergebnis rauskommt. Du betrachtest die Zeitpaare ja jetzt jeweils von zwei Seiten.

    Gruß
    docendo discimus

    Comment


    • #3
      Das Überschneiden zweier Zeiträume kann man einfacher mit
      [highlight=sql]
      beginzeit1 < endezeit2 and endzeit1 > beginzeit2
      [/highlight]
      abfragen

      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


      • #4
        Hallo Falk,

        ich gehe davon aus, dass er das so gemacht hat und sich bei "beginzeit1 < endzeit1" hier im Posting nur verschrieben hat. Rest s. o.


        Gruß frauwue
        docendo discimus

        Comment

        Working...
        X