Zusammenhängende Zeitspannen zusammenfassen?

18/03/2008 - 13:35 von Olaf Rabbachin | Report spam
Huhu!

In einem Buchungssystem werden Buchungen für einzelne Zeiteinheiten (z.B.
stündlich, bzw. á 59 Minuten) erzeugt. Die sich daraus ergebenden Zeiten
muss ich nun pro Tag zusammenfassen. Dabei müssen zusammenhàngende Zeiten
als "Block" ausgegeben werden. In der Buchungstabelle stellt sich das
(grob) wie folgt dar:
- #1 08:00-08:59
- #2 09:00-09:59
- #3 11:00-11:59
- #4 12:00-12:59

Aus obigen Datensàtzen ergàben sich damit zwei zusammenhàngende Zeitràume:
- 08:00-09:59 (#1, #2)
- 11:00-12:59 (#3, #4)

Wie kann ich aus den einzelnen Datensàtzen die gruppierte Sicht
erzeugen ..?

TIA & Gruß,
Olaf
 

Lesen sie die antworten

#1 Henry Habermacher
18/03/2008 - 14:08 | Warnen spam
Hallo Olaf

Olaf Rabbachin wrote:
Huhu!



Lala!

In einem Buchungssystem werden Buchungen für einzelne Zeiteinheiten (z.B.
stündlich, bzw. á 59 Minuten) erzeugt. Die sich daraus ergebenden Zeiten
muss ich nun pro Tag zusammenfassen. Dabei müssen zusammenhàngende Zeiten
als "Block" ausgegeben werden. In der Buchungstabelle stellt sich das
(grob) wie folgt dar:
- #1 08:00-08:59
- #2 09:00-09:59
- #3 11:00-11:59
- #4 12:00-12:59



du wirst mir sicher recht geben, dass da jeweils 1 Minute fehlt, was
mathematisch zu einigen Problemen und Unschàrfen führen kann, oder?

Aus obigen Datensàtzen ergàben sich damit zwei zusammenhàngende Zeitràume:
- 08:00-09:59 (#1, #2)



Uns wo ist nun die Minute von 08:59 bis 09:00 gebucht worden? Geht doch
nicht ganz auf, oder?


- 11:00-12:59 (#3, #4)

Wie kann ich aus den einzelnen Datensàtzen die gruppierte Sicht
erzeugen ..?



Das ganze ist rekursiv und da ist natürlich mit Access schnell mal schluss,
wenn Du nicht VBA zu hilfe nimmst. Access will und kann nicht rekursiv Daten
wiedergeben. Du könntest zwar einfach schauen, ob es eine Anschlusszeit zur
Endzeit gibt, aber diese hat ja wieder eine Endzeit und könnte wieder eine
Anschlusszeit haben. Das Datenmodell - da wird mir vermutlich auch unser
CODD Jünger recht geben - ist da ziemlich verquer.

Per VBA würde ich versuchen eine rekursiven Funktionsaufruf der folgenden
Art verwenden (Bild Typàhnlich):

Public Function findEndTimeID(ID) As Variant
Dim dteStart as DateTime
Dim nextID as Variant
dteStart = DLookup("EndTime", "DeineTabelle", "ID=" & ID)
dteStart = DateAdd("n", 1, dteStart)
NextID = DLookup("ID", "DeineTabelle", BuildCriteria("StartTime", dbDate,
"=" & Format(dteStartTime, "hh:nn:ss"))
If not isNull(NextID) Then
NextID = findEndTimeID(ID)
Else
NextID = ID
End If
findEndTimeID = NextID
End Function

Übrigens hast Du vergessen zu erwàhnen, dass Du Visual Studio 2005 hasst!

Dann machst Du eine Abfrage, bei der Du folgendes machst:
SELECT ID, StartTime, (SELECT EndTime FROM DeineTabelle WHERE
ID=findEntTimeID(ID)) As FinalTime

Nun musst Du nur noch ausfiltern, was sich nun überdecken würde.

Gruss
Henry


SEK2 Anmeldung: http://donkarl.com/?SEK
Microsoft MVP Office Access
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com

Ähnliche fragen