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:
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
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
sind?
ps: Ich arbeite mit dem SQL-Server 2000
Mit freundlichen Grüßen
Dominik Pfaffenbauer
Comment