Gemiddelde leeftijd berekenen van een groep in een tabel

Status
Niet open voor verdere reacties.

JohanRVT

Gebruiker
Lid geworden
2 mrt 2011
Berichten
555
Beste,
terug beetje aan klooien met een tabel met bewoners van ons WZC waarvan men de geboortedatum heeft en we de gemiddelde leeftijd van die personen op de dag van vandaag willen hebben.
Probleem die ik (nog) niet omzeild krijg is om het getal dan je met bv datediff("d"...) krijgt om te zetten naar "menselijke taal" dus jaren, maanden, dagen. Zie bijgevoegd voorbeeld
Bedankt alsvast voor uw suggestie en/of voorbeeld.
 

Bijlagen

Daar zijn mooie functies voor te vinden. Dit is er één van.
Code:
Function YearsMonthsDays(StartDate As Date, EndDate As Date) As String
Dim TotalMonths As Integer
Dim Years As Integer
Dim Months As Integer
Dim Days As Integer
Dim DaysDiff As Integer
Dim eomStart As Boolean, eomEnd As Boolean

TotalMonths = DateDiff("m", [StartDate], [EndDate])
DaysDiff = DatePart("d", [EndDate]) - DatePart("d", [StartDate])

'find out if StartDate is End of the Month
If DatePart("m", DateAdd("d", 1, StartDate)) = DatePart("m", DateAdd("m", 1, StartDate)) Then
    eomStart = True
Else
    eomStart = False
End If

'find out if EndDate is End of the Month
If DatePart("m", DateAdd("d", 1, EndDate)) = DatePart("m", DateAdd("m", 1, EndDate)) Then
    eomEnd = True
Else
    eomEnd = False
End If

Years = Int(TotalMonths / 12)
Months = TotalMonths - (Years * 12)
Days = DateDiff("d", DateAdd("m", TotalMonths, StartDate), EndDate)

If DaysDiff = 0 Then
    If eomStart Xor eomEnd Then
        Months = Months - 1
        Days = DateDiff("d", DateAdd("m", TotalMonths - 1, StartDate), EndDate)
    Else
        Days = DateDiff("d", DateAdd("m", TotalMonths, StartDate), EndDate)
    End If
ElseIf DaysDiff < 0 Then
    If eomStart And eomEnd Then
        Days = DateDiff("d", DateAdd("m", TotalMonths, StartDate), EndDate)
    Else
        Months = Months - 1
        Days = DateDiff("d", DateAdd("m", TotalMonths - 1, StartDate), EndDate)
    End If
End If

YearsMonthsDays = (Years & " jaar, ")
If Months = 1 Then
    YearsMonthsDays = YearsMonthsDays & Months & " maand, "
ElseIf Months > 1 Or Months = 0 Then
    YearsMonthsDays = YearsMonthsDays & Months & " maanden, "
End If
If Days = 1 Then
    YearsMonthsDays = YearsMonthsDays & Days & " dag"
ElseIf Days > 1 Then
    YearsMonthsDays = YearsMonthsDays & Days & " dagen"
End If
End Function
 
Michel, die functie had ik ook reeds gevonden en 't zat in de databasemodule (ik heb die van U even hernoemt naar YearsMonthsDays2 en beide modules toegepast in een nieuwe query "Bewoner_leeftijd_test2" en je zult zien dat beide dezelfde resultaten geven, ene wel in 't engels en die steeds ook nog dagen weergeeft) maar 't brengt ons niet dichter bij het weergeven van het gemiddelde van die ganse groep in één string bv bovenaan de formulier pagina of in een reportheader.
 

Bijlagen

Je kunt met deze functie geen gemiddelde berekenen van een groep, wat uiteraard logisch is. Een gemiddelde bereken je over getallen, niet over tekst. Je zou kunnen proberen om in een query de gemiddelde leeftijd te berekenen, en die te vertalen met de functie.
Overigens doet mijn functie het netjes in Nederlands; was dat nog niet opgevallen?
 
Om je ook de oplossing maar te geven:
Code:
SELECT Avg([BGeboortedatum]) AS [Gemiddelde leeftijd], YearsMonthsDays2([Gemiddelde leeftijd],Date()) AS Leeftijd FROM Bewoner;
 
Bedankt Michel, ondertussen in de never ending story van dingen die bijgevraagd worden hier het volgende (zie voorbeeld): van onze bewonertabel wordt gevraagd de gemiddelde leeftijd van het aantal bewoners bestaande uit de momenteel aanwezige bewoners + de bewoners die uitgetreden, overleden, etc... zijn binnen een bepaalde periode (meestal zal dit tussen begin en einde van het jaar zijn maar de gebruiker zal dit zelf kunnen/willen kiezen aan de hand van de keuzelijsten in het formulier). De leeftijd van de bewoner wordt gemeten aan de hand van het verschil van de geboortedaum en peildatum tot. Voor de levende mensen is dat geen probleem maar hoe moet je daar de juiste leeftijd van de overleden mensen in gaan onderscheiden en toch mee laten berekenen in het gemiddelde? Iemand die overleden is bv januari 2013 en je neemt eind maart 2013 je peildatum voor het formulier zal dus een paar maand ouder lijken wat hij dus niet is.
 

Bijlagen

Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan