La data più remota tra quattro colonne

di il
7 risposte

La data più remota tra quattro colonne

Salve a tutti. Ho questo problema: su quattro colonne di una tabella possono essere registrate da una  a quattro date per record (almeno una di sicuro). 
Come posso fare per identificare la data più antica? In Excel la cosa sarebbe semplice (tipo min (a,b,c,d) ma in Access? Attendo Vs. utili (sempre!) consigli, grazie.

7 Risposte

  • Re: La data più remota tra quattro colonne

    Usa la funzione DateDiff. Non fare, però, l'errore di trasportare i concetti validi per un foglio calcolo ad un db.

  • Re: La data più remota tra quattro colonne

    Non sono 4 colonne quelle sono in Excel come ti ha detyo Antony, una tabella ha CAMPI ed avere 4 campi su cui poi devi ricavare la più remota è il tipico esempio di come sia sbagliata la struttura che hai fatto.

    Si usa un solo campo e su quello basta ordinare in Decrescente e recuperare ul TOP1 per ogni ricorrenza lato 1.

    Prova a studiare la base della normalizzazione dei database, potrebbe aiutarti a comprendere il concetto che sta dietro alla mia considerazione, senza la quale immagino sia un po difficile capire.

  • Re: La data più remota tra quattro colonne

    Come ti e' stato detto, se richiedi questa informazione, i dati sul dbms devono essere salvati in modo opportuno. 

    In questo caso hai una sola soluzione: implementare una funzione apposita. 

  • Re: La data più remota tra quattro colonne

    Se crei le tabelle da fogli excel senza “pensarle” per un db relazionale con le sue regole, avrai sempre problemi  

  • Re: La data più remota tra quattro colonne

    Allora vediamo se mi spiego meglio. Da un elenco Share Point (per definizione NON relazionale) mi arriva, su una tabella linkata, una serie di date, disposte su su quattro campi distinti. Chiamiamoli A B C D, per semplicità. Ora i quattro campi possono essere valorizzati o meno ma almeno uno dei quattro contiene necessariamente una data. Vorrei realizzare, tramite query, un campo calcolato che selezioni la data più antica, per poi mettere il tutto in ordine cronologico. Come si può fare? Grazie, m.

  • Re: La data più remota tra quattro colonne

    Tralasciando la teoria…

    Per realizzare quanto chiesto l'unico sistema è realizzare una UDF, una funzione VBA, che, passando tutti e 4 i campi, restituisca la data più antica…!

    Una cosa perditempo come questa, efficienza bassa ma temo non ci siano strade più performanti dal momento che la variabilità dei campi va validata…

    Public Function getOlder(dt1 As Variant, dt2 As Variant, dt3 As Variant, dt4 As Variant) As Date
        Dim s       As String
        Dim item    As Variant
        Dim Items   As Variant
        Dim dtOlder As Date
        If Not IsNull(dt1) Then s = s & CStr(dt1) & ";"
        If Not IsNull(dt2) Then s = s & CStr(dt2) & ";"
        If Not IsNull(dt3) Then s = s & CStr(dt3) & ";"
        If Not IsNull(dt4) Then s = s & CStr(dt4) & ";"
        If Len(s) > 0 Then s = Mid$(s, 1, Len(s) - 1)
        If Len(s) > 0 Then
            s = Mid$(s, 1, Len(s) - 1)
            Items = Split(s, ";")
            dtOlder = Items(0)
            For Each item In Items
                If CDate(item) < dtOlder Then dtOlder = CDate(item)
            Next
            getOlder = dtOlder
        End If
    
    End Function		

    Questa funzione restituirà un Campo Calcolato sul quale potrai ORDINARE.

    SELECT *,getOlder(dt1,dt2,dt3,dt4) AS Older FROM T1 ORDER BY...
  • Re: La data più remota tra quattro colonne

    Proverò a capirla e poi… ad applicarla. Intanto grazie infinite, sto imparando molto da tutti voi ! Se ho dubbi tornerò a disturbarvi, m.

Devi accedere o registrarti per scrivere nel forum
7 risposte