Temat: Obliczanie czasu na podstawie daty bieżącej i następnej
Jeżeli dane są wprowadzane sukcesywnie i kolejność dat jest zgodna z ID (autonumerowanie) rekordu to sprawa jest stosunkowo prosta.
(Uwaga! Nie działa jeżeli stosowana jest replikacja bazy i ID są losowe, lub dane nie są wprowadzone po kolei)
Należy użyć funkcji agregującej
DMax do ustalenia czasu poprzedniego rekordu.
W siatce kwerendy wpisujemy:
data_poprzednia: DMax("data";"tblTabela";"id< " & tblTabela.id)
i otrzymujemy datę
Podobnie otrzymujemy różnicę:
roznica: [data]-DMax("data";"tblTabela";"id< " & [tblTabela].[id])
Wynik otrzymujemy w dniach. Godziny i minuty są przedstawione jako ułamki dnia.
Np. 6 h to 0,25
5h:59min to 0,2499
Jeżeli chcemy godziny mieć w sensownym formacie to najłatwiej podzielić różnice na dwie części:
dni i godziny.
roznica_dni: Int([data]-DMax("data";"tblTabela";"id< " & tblTabela.id))
roznica_godzin: [data]-DMax("data";"tblTabela";"id< " & tblTabela.id)-Int([data]-DMax("data";"tblTabela";"id< " & tblTabela.id))
Dni wyświetlamy jako liczbę , natomiast polu z różnicą godzin przypisujemy maskę godzina_długa
Pełny przykład na którym testowałem. Tabela tblTreningi, zapytanie zwracające czas od poprzedniego treningu:
SELECT tblTreningi.id,
tblTreningi.aktywnosc,
tblTreningi.data,
tblTreningi.km,
DMax("data","tblTreningi","id< " & tblTreningi.id) AS data_poprzedniego_treningu,
[data]-DMax("data","tblTreningi","id< " & tblTreningi.id) AS roznica,
Int([data]-DMax("data","tblTreningi","id< " & tblTreningi.id)) AS roznica_dni,
[data]-DMax("data","tblTreningi","id< " & tblTreningi.id)-Int([data]-DMax("data","tblTreningi","id< " & tblTreningi.id)) AS roznica_godzin
FROM tblTreningi;