Creare una funzione per calcolare l'età media di tutti i dipendenti.

Anonimo
2022-11-11T16:52:44+00:00

Buona sera a tutti.

Ho una tabella chiamata TblAnagrafica, in cui, oltre al campo ID_Angrafica c'è un campo in cui inserisco la data di nascita dei relativi dipendenti, chiamato : Data_Nascita.

Desidero, con il vostro aiuto, poter creare una funzione che mi calcoli l'età media anagrafica di tutti i dipendenti censiti n in tabella.

Ringrazio in anticipo chi mi aiuta in questo.

Ciao, Nicola.

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2022-11-14T12:41:24+00:00

Ciao Nicola,

meglio se mostri il predicato Sql la prossima volta, prova :

SELECT Impiegati.IDImpiegato

         , Impiegati.Cognome

         , Impiegati.DataNascita

         , AGE([Datanascita]) AS AGE

         , (SELECT   

                    AVG(D.AGE) AS m\_AVG  

         FROM   

                    (SELECT  

                              age([dataNascita]) AS age  

                   FROM   

                             Impiegati AS i  

                   where

                             I.in\_forza=-1 

           )  AS d) AS MaVG, Impiegati.in\_forza 

FROM

     Impiegati 

WHERE

       Impiegati.in\_forza=True; 

per la seconda where condition, valuta se vuoi vedere tutti gli effettivi o no, credo di no....in ogni caso up to you.

ciao, Sandro.

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento
Risposta accettata dall'autore della domanda
domenico laurenza 9,900 Punti di reputazione Moderatore volontario
2022-11-11T21:00:29+00:00

Ciao Nico,

scusa per il ritardo, problemi vari,

prova con il seguente:

Option Compare Database

Option Explicit

Function Eta_Media()

Dim myRst As Recordset 

Dim Somma As Long 

Dim NumDip As Long 

Set myRst = CurrentDb.OpenRecordset("Select \* From tblAnagrafica") 

Do While Not myRst.EOF 

   Somma = Somma + DateDiff("yyyy", myRst("Data\_Nascita"), Date) - IIf(Format(myRst("Data\_Nascita"), "mmdd") > Format(Date, "mmdd"), 1, 0) 

   NumDip = NumDip + 1 

   myRst.MoveNext 

Loop 

Eta\_Media = Somma / NumDip 

Set myRst = Nothing 

End Function

Nella report e dovunque puoi utilizzare =Eta_Media()

Se in tabella hai date Null potresti avere problemi.

Ciao Mimmo

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

16 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2022-11-12T19:41:30+00:00

    Ciao Sandro, che piacere vederti di nuovo presente sul forum. Appena rientro in ufficio, provo le vostre soluzioni e vi aggiorno.

    Ciao, Nicola.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2022-11-12T17:47:18+00:00

    ciao Nicola,

    SELECT Impiegati.IDImpiegato,

             Impiegati.Cognome,
    
             Impiegati.DataNascita,
    
             AGE([Datanascita]) AS AGE,
    
             (SELECT  
    
                        AVG(D.AGE) AS m\_AVG 
    
             FROM  
    
                        (SELECT 
    
                                  age([dataNascita]) AS age 
    
                       FROM  
    
                                 Impiegati AS i 
    
               )  AS d) AS MaVG 
    

    FROM Impiegati;

    in un modulo pubblico :

    Public Function age(ByVal dtDB As Date, Optional ByVal dtDate As Date = 0) As Integer 
    
    If dtDate = 0 Then dtDate = VBA.Date() 
    
    age = DateDiff("yyyy", dtDB, dtDate) + (dtDate < DateSerial(Year(dtDate), Month(dtDB), Day(dtDB))) 
    
    End Function 
    

    ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2022-11-11T21:37:10+00:00

    Ciao Mimmo, grazie per tutto.

    Proverò la tua funzione e ti aggiornerò.

    Non ho date di nascita senza valori.

    Ciao, Nicola.

    La risposta è stata utile?

    0 commenti Nessun commento