Calcolo dell'età e elenco in ordine di anzianità

di il
17 risposte

Calcolo dell'età e elenco in ordine di anzianità

Ciao a tutti

Sto cercando di creare un report che mi elenchi (almeno per ora) i dipendenti in ordine di età, dal più vecchio al più giovane (o anche viceversa).

Impostando la query in questo modo:

SELECT [Cognome] & ' ' & [Nome] AS NomeComp, DateDiff('yyyy',[NatoIl],Date()) AS Eta FROM tblPersonale ORDER BY DateDiff('yyyy',[NatoIl],Date()) DESC;

Il risultato è corretto, o almeno lo è parzialmente.

Infatti se ad esempio ho 3 nominativi ambetre (scherzo)....  di 45 anni, mi vengono ordinati solo per ordine alfabetico A-B-C

Ma se per caso B fosse più vecchio (per il mese di nascita) di C che è più vecchio di A, l'ordine dovrebbe essere B-C-A

Girovagando in rete ho trovato come calcolare l'effettivo cambio di età (dato che DateDiff si limita a calcolare la differenza in anni, ma aggiungendo una verifica Iff è possibile essere precisi), che può avere la sua utilità se magari devo calcolare una scadenza o verificare che un dato soggetto ad una data specifica abbia realmente compiuto gli anni richiesti.

Ma nel mio caso non credo vada bene, perchè mi interessa sapere che, ad esempio, quest'anno ci sono X persone che compiono 45 anni (e qui la mia query fa il suo dovere) ma al tempo stesso mi vengano riportate nell'ordine in cui compiranno gli anni (e quindi in base al mese e a parità di mese in base al giorno).

Suggerimenti?

Grazie

Andrea

17 Risposte

  • Re: Calcolo dell'età e elenco in ordine di anzianità

    Ciao,

    dal più vecchio al più giovane

    SELECT [Cognome] & ' ' & [Nome] AS NomeComp, DateDiff('yyyy', [NatoIl], Date()) AS Eta, [NatoIl]
    FROM tblPersonale
    ORDER BY DateDiff('yyyy', [NatoIl], Date()) DESC, Format([NatoIl], "mmdd");

    dal più giovane al più vecchio

    SELECT [Cognome] & ' ' & [Nome] AS NomeComp, DateDiff('yyyy', [NatoIl], Date()) AS Eta, [NatoIl]
    FROM tblPersonale
    ORDER BY DateDiff('yyyy', [NatoIl], Date()), Format([NatoIl], "mmdd") DESC;
  • Re: Calcolo dell'età e elenco in ordine di anzianità

    Scusate ma non capisco perché spezzare anno mese ed altre cose... se si ordina per criterio Alfabetico e per DataNascita non va bene...?

    Se poi si vuole dal più vecchio al più giovane basta usare Desc...?

    Quel modo poi di calcolare l'età espone ad imprecisioni.

    Nel caso serva l'età su può vedere questo:

    www.donkarl.com/it?FAQ2.7

    Forse ho frainteso...

  • Re: Calcolo dell'età e elenco in ordine di anzianità

    derivato da Dev Ashish:

    DateDiff("aaaa";[DataNascita];Date())+(Format(Date();"mmgg")<Format([DataNascita];"mmgg"))

    Prima tramite DateDiff vengono calcolati gli anni tra le due date.
    Poi verifica se giorno e mese della data attuale sono inferiori alla data di nascita.
    In caso positivo un anno dev'essere detratto.

    Ciao @Alex direi proprio di si !  ... Non mi sono posto il problema, io per esempio ho sempre usato una funzione esterna con il ritorno degli Anni e Giorno Mese del compleanno,insomma... altri scenari... non mi è mai capitato di doverla calcolare in linea in questo modo

    e in tal caso:

    dal più vecchio al più giovane

    SELECT [Cognome] & ' ' & [Nome] AS nomeCampo, DateDiff("yyyy",[NatoIl],Date())+(Format(Date(),"mmdd")<Format([NatoIl],"mmdd")) AS Eta, [NatoIl]
    FROM tblPersonale
    ORDER BY [NatoIl] ASC;

    dal più giovane al più vecchio

    SELECT [Cognome] & ' ' & [Nome] AS nomeCampo, DateDiff("yyyy",[NatoIl],Date())+(Format(Date(),"mmdd")<Format([NatoIl],"mmdd")) AS Eta, [NatoIl]
    FROM tblPersonale
    ORDER BY [NatoIl] DESC;
  • Re: Calcolo dell'età e elenco in ordine di anzianità

    Non so de ho capito bene...

    pippo nato il 10/1/2000 25 anni

    pluto nato il 20/1/2000 25 anni

    topolino nato il 15/01/2000 25 anni

    hanno la stessa età quindi vengono ordinati per nome

    datediff per anno (yyyy) ti da sempre l'eta il che può andare bene ma quando ordini devi mettere l'eta, annonascita, nome

    così prima ordini per età 45 anni nel tuo caso

    poi per anno di nascita

    infine per nome.

    ottieni l'ordine: pippo 25 anni; topolino 25 anni; pluto 25 anni

  • Re: Calcolo dell'età e elenco in ordine di anzianità

    12/04/2025 - sihsandrea ha scritto:

    Non so de ho capito bene...

    Da quello che ho capito l'OP vorrebbe (condizionale d'obbligo) avere un risultato di questo tipo:

    (data di rifermenti oggi 12/04/2025)
    In blue evidenziato The Pooh Winnie che ancora non ha fatto il compleanno e risulta più piccolo...  quindi ha un anno in meno fino a domani.

    In rosso si evedenziano nominativi che per lo stesso anno e mese ma con giorno diverso, possono essere più vecchi oppure più giovani.

    Dal più vecchio al più giovane   Dal più giovane al più vecchio  
    NomeCompEtaDataNascita NomeCompEtaDataNascita
    Locatelli Manuel2601/02/1999 Marcos Antonio2501/01/2000
    Rossi Valentino2601/02/1999 Mandragora Rolando2501/12/1999
    Tsadjout Frank2601/02/1999 Maleh Youssef2501/11/1999
    Lombardi Cristiano2601/03/1999 Zirkzee Joshua2501/11/1999
    Valencia Diego2601/03/1999 Maldini Daniel2501/10/1999
    Lovric Sandi2601/04/1999 Zapata Duvan2501/10/1999
    Verde Daniele2601/04/1999 Malagrida Lorenzo2501/09/1999
    Capirossi Loris2603/04/1999 Vorlicky Lukas2501/09/1999
    Orso Yoghi2611/04/1999 Maggiore Giulio2501/08/1999
    Orso Bubu2612/04/1999 Voelkerling Persson2501/08/1999
    The Pooh Winnie2513/04/1999 Lunetta Gabriel2501/06/1999
    Luis Alberto2501/05/1999 Vlahovic Dusan2501/06/1999
    Vergani Edoardo2501/05/1999 Luis Alberto2501/05/1999
    Lunetta Gabriel2501/06/1999 Vergani Edoardo2501/05/1999
    Vlahovic Dusan2501/06/1999 The Pooh Winnie2513/04/1999
    Maggiore Giulio2501/08/1999 Orso Bubu2612/04/1999
    Voelkerling Persson2501/08/1999 Orso Yoghi2611/04/1999
    Malagrida Lorenzo2501/09/1999 Capirossi Loris2603/04/1999
    Vorlicky Lukas2501/09/1999 Lovric Sandi2601/04/1999
    Maldini Daniel2501/10/1999 Verde Daniele2601/04/1999
    Zapata Duvan2501/10/1999 Lombardi Cristiano2601/03/1999
    Maleh Youssef2501/11/1999 Valencia Diego2601/03/1999
    Zirkzee Joshua2501/11/1999 Locatelli Manuel2601/02/1999
    Mandragora Rolando2501/12/1999 Rossi Valentino2601/02/1999
    Marcos Antonio2501/01/2000 Tsadjout Frank2601/02/1999
    SELECT [Cognome] & ' ' & [Nome] AS nomeCampo, DateDiff("yyyy",[NatoIl],Date())+(Format(Date(),"mmdd")<Format([NatoIl],"mmdd")) AS Eta, [NatoIl] 
    FROM tblPersonale ORDER BY [NatoIl] ASC;

    SELECT [Cognome] & ' ' & [Nome] AS nomeCampo, DateDiff("yyyy",[NatoIl],Date())+(Format(Date(),"mmdd")<Format([NatoIl],"mmdd")) AS Eta, [NatoIl]
    FROM tblPersonale ORDER BY [NatoIl] DESC;
  • Re: Calcolo dell'età e elenco in ordine di anzianità

    SELECT [Cognome] & ' ' & [Nome] AS NomeComp, natoil, DateDiff('yyyy',[NatoIl],Date()) AS Eta FROM tblPersonale ORDER BY NatoIl;
    SELECT [Cognome] & ' ' & [Nome] AS NomeComp, natoil, DateDiff('yyyy',[NatoIl],Date()) AS Eta FROM tblPersonale ORDER BY NatoIl DESC;
  • Re: Calcolo dell'età e elenco in ordine di anzianità

    11/04/2025 - @Alex ha scritto:

    Scusate ma non capisco perché spezzare anno mese ed altre cose... se si ordina per criterio Alfabetico e per DataNascita non va bene...?

    .........

    www.donkarl.com/it?FAQ2.7

    Si infatti è quello che mi serviva (ordinarli per data di nascita e non come ho fatto io... - come complicarsi la vita quando basta la semplicità......)

    Riguardo al link suggerito, mi riferivo proprio a quel tipo di calcolo (anche se nel caso di questo post non mi serve - non ancora almeno...)

    Ringrazio comunque tutti per la collaborazione (e pazienza)

  • Re: Calcolo dell'età e elenco in ordine di anzianità

    11/04/2025 - Jocman ha scritto:

    Infatti se ad esempio ho 3 nominativi ambetre (scherzo)....  di 45 anni, mi vengono ordinati solo per ordine alfabetico A-B-C

    Ma se per caso B fosse più vecchio (per il mese di nascita) di C che è più vecchio di A, l'ordine dovrebbe essere B-C-A

    Quindi fai una domanda per ottenere una risposta che non risponde alla domanda ????  mah.. direi idee molto chiare. Analisi impeccabile... Bah...

    Thread del tutto inutile.

  • Re: Calcolo dell'età e elenco in ordine di anzianità

    SE si vuole ordinare per data di nascita BISOGNA STARE ATTENTI a come la data e' RAPPRESENTATA: 

    SE come stringa (soluzione adottata da quelli che non sanno programmare)

    OPPURE 

    da un oggetto di tipo "datetime"/"timestamp", che SA come trattare le date (e il loro ordine)

    SE la data e' rappresentata come stringa, ESISTE UN'UNICA RAPPRESENTAZIONE in cui l'ordine delle stringhe COINCIDE con l'ordine delle date:

    "yyyy/mm/dd"

    cioe':

    ANNO (4 cifre) 

    SEPARATORE (/ oppure - o altro)

    MESE (2 cifre)

    SEPARATORE

    GIORNO (2cifre).

    La rappresentazione Italiana ("dd/mm/yyyy")

    NON FUNZIONA!

    E NON FUNZIONA NEMMENO se invece di 2 cifre (per giorno e mese) si usa SOLO 1.

    L'alternativa e' fare i test SEPARATAMENTE su (nell'ordine) ANNO, MESE, GIORNO

    se l'anno e' uguale, si confronta il mese

    se il mese e' uguale, si confronta il giorno

  • Re: Calcolo dell'età e elenco in ordine di anzianità

    15/04/2025 - migliorabile ha scritto:

    SE si vuole ordinare per data di nascita BISOGNA STARE ATTENTI a come la data e' RAPPRESENTATA: 

    Stabilito una volta per tutte che se lavoro con le date uso un formato data, se uso interi uso formati interi ecc..

    Select formato data(quello che vuoi), blabla...

    Order by campodataalnettodelletrasdormazioni

    Infatti anche se calcola gli anni da datediff poi deve ordinare per campo data nella sua natura di data rappresentata da un numero con parte intera e parte decimale.

    Quindi, se trasformo la data come giorno, settimana, anno, mese, day con tanto di cornicetta e grazie, alla fine devo sempre ordinare per data nascita per cui l'ordinamento non cambia.

  • Re: Calcolo dell'età e elenco in ordine di anzianità

    Ragazzi, se bisogna fare un tratato sulle date .... vorrei ricordare che siamo nel nuovo millenio e oggi siamo nel 2025

    Ma mi voglio ripetere  ben volentieri... questo è un thread del tutto inutile... 

    Si parla delle basi. Se ad oggi ancora non sono chiare le basi... e che  caspita, rimango senza parole.

    Un esempio più che chiaro e dimostrativo l'ho fatto nei post sopra, con tanto di codice e disegnini. Se non è chiaro o se non sono chiari certi concetti... mah, penso che ci sia veramente poco o niente altro da aggiungere.

    Poi se proprio si vuole e, allora famo sto'trattato sulle date... ma siamo sicuri di volerlo fare?

    ...si può anche non fare... poi se uno proprio lo vuol fare ... e allora famolo ;-))

    .
    Ma voglio dire... oggi è un giorno nuovo e io sono più vecchio, però ieri è una data più vecchia rispetto ad oggi e ieri è anche una data più piccola di oggi...
    ma com'è  sto fatto???

  • Re: Calcolo dell'età e elenco in ordine di anzianità

    By65Franco tu parti dall' (errata :-)) ipotesi che chi "programma" sia un "programmatore" con le opportune "competenze".

    Ma, come ben sai, TUTTI sanno programmare, dal ragazzino di 12 anni alla Casalinga di Voghera, e le AI fanno quello che un "programmarore" ha imparato a fare in N-mila anni di studio :-).

    Quindi, i "programnatori" non servono!

    Basta il ragazzino con  buona volonta' (o la Casalinga di Voghera).

    Stesso risultato ad una frazione del costo :-)

    In teoria :-)

  • Re: Calcolo dell'età e elenco in ordine di anzianità

    15/04/2025 - migliorabile ha scritto:

    Basta il ragazzino con  buona volonta' (o la Casalinga di Voghera).

    Stesso risultato ad una frazione del costo :-)

    In teoria :-)

    E si , in teoria... 

    e allora per avere conferma ho appena chiamato la casalinga di Voghera... (pure simpatica è) e gli ho chiesto: metti il caso che per un giorno o due viene a meno la connessione ad internet... che fai ????

    Sai cosa mi ha risposto ;-)) ? ...  "dovrò tornare a fare la casalinga :-(" 

    Puoi immaginare lo sconforto ... ho provato a consolarla, purtroppo non c'è stato niente da fare.

    Mo' sarei curioso di parlare con il ragazzino... strano ma non riesco a trovarlo.... dice che si chiama; di nome "Ctrl C" e di cognome se non erro... "Ctrl V" 
    Provo a riprovare.... e visto mai ;-))

    .
    Ma visto che ora mai siamo Off T ... hai sentito la notizia della richiesta di "addestrare" l'AI passandogli tutti i profili dei social ... da facebook a tiktok? pare anche quelli di whatsapp... sarebbe pazzesco in tutti i sensi.
    Ma del resto non sarebbe neppure una così grande novità. Si sapeva che prima o poi, in un modo o in un altro, avrebbero messo le mani anche sulle profilazioni.

    .
    A proposito... ho chiesto il profilo della Casalinga di Voghera all'Ai:

    dammi il profilo di "la casalinga di Voghera". Grazie

    ChatGPT ha detto:

    Certo Franco! 
    Il profilo della "casalinga di Voghera" è un’espressione tutta italiana, diventata col tempo quasi proverbiale. Ti faccio un riassunto chiaro e un po’ colorito, come piace a noi:

     La Casalinga di Voghera – Profilo Socio-Culturale

    Origine del termine:
    L’espressione nasce tra gli anni '60 e '70 nei mezzi di comunicazione, e fa riferimento a una figura immaginaria, simbolo della persona comune, media, spesso usata in politica, pubblicità e giornalismo.

    Chi è?
    Una donna di mezza età o anziana, che vive in provincia (tipicamente Voghera, cittadina della Lombardia), senza ruoli pubblici, con istruzione modesta, pratica e concreta. Si occupa della casa, fa la spesa, guarda la TV, e vota con convinzioni semplici ma decise.

    Caratteristiche:

    • Pragmatica: non si perde in chiacchiere, vuole soluzioni concrete.
    • Tradizionalista: spesso legata a valori familiari, religiosi e di buon senso.
    • Informata... a modo suo: guarda il telegiornale, ascolta la radio, ma non approfondisce molto. Tuttavia ha un’opinione su tutto.
    • Simbolo del “buon senso popolare”: è la misura della persona comune, a cui la politica e i media si rivolgono per testare la comprensibilità e l’efficacia di un messaggio.

    Oggi:
    Anche se il ruolo della donna è cambiato tantissimo, l’espressione viene ancora usata (a volte ironicamente, a volte con rispetto) per indicare l’italiano medio non specializzato, quello che valuta le cose con semplicità, istinto e spirito pratico.

    Ecco qua... come volevasi dimostraere... siamo già profilizzati ;-)

  • Re: Calcolo dell'età e elenco in ordine di anzianità

    14/04/2025 - By65Franco ha scritto:

    11/04/2025 - Jocman ha scritto:

    Infatti se ad esempio ho 3 nominativi ambetre (scherzo)....  di 45 anni, mi vengono ordinati solo per ordine alfabetico A-B-C

    Ma se per caso B fosse più vecchio (per il mese di nascita) di C che è più vecchio di A, l'ordine dovrebbe essere B-C-A

    Quindi fai una domanda per ottenere una risposta che non risponde alla domanda ????  mah.. direi idee molto chiare. Analisi impeccabile... Bah...

    Thread del tutto inutile.

    Mi sono accorto che dopo il mio post di ringraziamento c'erano state altre risposte, e sono andato a guardarle.

    Lungi da me andare a oltranza nell'argomento, ma francamente mi sento richiamato in causa e  la cosa non mi va (e chiedo scusa se qualcuno se ne dovesse risentire).

    Ritengo che sia io a dover essere assimilato al "ragazzino" (la casalinga non credo, per fare quel "lavoro" ci vogliono veramente gli attributi)? 

    Beh, a parte che ringrazierei del complimento giovanile (ho i miei 52 anni all'attivo, e del resto con solo 176 post nel forum ma chi credo di essere???...), ma a parte questo non credo di aver.....destabilizzato qualcuno con la mia domanda; domanda a cui tra l'altro ho ottenuto risposta.

    Certo, come credo di aver dato atto, la risposta era più semplice del previsto, ma credo capiti a chiunque quell'attimo (anche lunghetto) in cui il neurone si inceppa e non vede l'evidenza. A me capita spesso (che volete, sarà l'età, a dispetto dell'essere il "ragazzino"), ma anche in questo caso non mi sembra il caso di inziare una polemica (che forse potrebbe anche essere gratuita?)

    Negli anni mi sono iscritto a mille mila forum: da quelli più nonsense, a quelli specializzati (tra macchine CNC, hobby, programmazione, etc). E la mia linea di condotta è sempre stata la stessa:

    1) se hai bisogno tu, prima di rompere le scatole, cerca una soluzione in rete, magari qualcuno ne ha già parlato

    2) prima di criticare (a qualunque titolo), ricordati che ci sei passato tu per primo (o qualcuno forse è nato "imparato"????)

    3) se scrivi qualcosa, cerca di essere utile all'argomento, ad essere inopportuni ci pensano già altri. Se non sai che scrivere, limitati a leggere.

    4) se non puoi rispondere (contribuire) con qualcosa di utile, è inutile scrivere giusto per.... Non è solo un thread a poter essere inutile, ma pure (e spesso) lo è un post in quel thread. Come si dice: "Chiedere è lecito, rispondere è cortesia", nessuno mi obbliga a dire la mia a tutti i costi.

    5) se però senti il bisogno impellente di cui al punto 4, almeno pensaci su una decina di volte, magari ti rendi conto che saresti inutile e inopportuno e desisti.

    Detto questo, mi scuso per essere andato (oggettivamente) OT, mi scuso se qualcuno si possa essere risentito per quello che ho scritto (e si, il punto 5 l'ho seguito), e in ogni caso ringrazio e ringrazierò sempre e comunque chi dedica un pò del suo tempo agli altri, anche per dare aiuto su argomenti "inutili".

    Andrea

Devi accedere o registrarti per scrivere nel forum
17 risposte