Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [ACCESS] Conta i record per data decrescente conteneti lo stesso valore fino al primo record con valore diverso

    ciao a tutti, devo conteggiare il numero di record, ordinati per data, che in un campo specifico contengono lo stesso valore fino al primo record con valore diverso, esempio:

    TABELLA
    Nome Data Valore
    ordinamento Z-A
    Mario
    15/05/2017
    A
    Mario 10/04/2017 A
    Mario 18/03/2017 A
    Mario 09/02/2017 BB
    Mario 15/01/2017 A

    Antonio

    15/05/2017

    A
    Antonio 10/04/2017 A
    Antonio 18/03/2017 BB
    Antonio 09/02/2017 BB
    Antonio 15/01/2017 A

    Anna

    15/05/2017

    A
    Anna 10/04/2017 A
    Anna 18/03/2017 A
    Anna 09/02/2017 A
    Anna 15/01/2017 BB
    La query con NOME (Raggruppamento) e VALORE (conteggio) mi dovrà dare questo risultato:
    Mario 3
    Antonio 2
    Anna 4

    Grazie per l'aiuto.
    Ultima modifica di hgiorgio; 22-05-2017 a 21:25

  2. #2
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Quote Originariamente inviata da hgiorgio Visualizza il messaggio
    ...... ordinati per data .........
    Premesso che mi sembra che questa domanda anderbbe nella sezione "DataBase"

    Ti manca un qualcosa di veramente univoco con cui ordinare i record

    Immagina questa situazione:

    Mario 15/05/2017
    A
    Mario 10/04/2017 A
    Mario
    18/03/2017
    A
    Mario 18/03/2017
    BB
    Mario
    15/01/2017 A

    i record rossi si contano certamente
    i record verdi si escludono certamente
    per i record blu non si sà perche non è chiaro (a livello di DB) quale dei 2 sia sopra oppure sotto

    Se pero tu ci "certifichi" che la coppia "Nome" + "Data" è univoca allora si puo fare

    Facci sapere
    Ultima modifica di nman; 23-05-2017 a 07:11

  3. #3
    Caro NMAN, hai ragione, infatti l'ID univoco c'è perchè il record ha un ID univoco, e anche ogni riga contiene per quella data una sola volta il valore: Mario il 15/05/2017 ha il valore A una sola volta per la stessa data e non può avere anche un'altro valore per quel giorno.
    Mi spiego meglio con una analogia: immagina una partita di calcetto SquadraA-SquadraB che giocano il 15/05/2017; il risultato per quella data può essere uno solo per ogni squadra:
    ID 120 - SquadraA - partita del 15/05/2017 - risultato 1
    ID 121 - SquadraB - partita del 15/05/2017 - risultato 2
    Spero di aver chiarito in questo modo.

    p.s.: ho cercato Access sulla categoria Database ma non l'ho trovato. Ora so che devo mettere lì eventuali miei post. Grazie.

  4. #4
    preciso una cosa ancora vedendo il tuo esempio: tu hai fatto 2 "A" rosse, poi 1 "A" blu, poi 1 "BB" blu ed in fine 1 "A" verde. in realt� a me serve, in una tabella ordinata per data, contare tutte le "A" di MARIO (e anche di altri nominativi) finch� non si trova il primo valore diverso ("BB" nel tuo caso), ignorando da quel valore tutto il resto anche se ci sono delle "A" dopo di esso. Quindi nel tuo esempio le "A" da contare sono 3 (le 2 "A" rosse e la prima "A" blu, meglio rappresentato qui sotto), come anche, nel mio caso, non possono esistere 2 valori per MARIO nella stessa data che qui sotto ho modificato in 18/02/2017. Preciso anche che gli ID dei record di MARIO non saranno consecutivi perch� per ogni data sar� inserito un valore, solo 1, per ogni nominativo. Ti faccio un altro esempio:
    Mario, Antonio, Anna, ecc. partecipano a corsi che si svolgono in pi� date. i valori saranno: A= Assente, BB=Presente e G=Giustificato; a me interessa sapere per ogni partecipante, da oggi, quante sono le assenza consecutive fino a quando � stato presente l'ultima lezione.

    Mario 15/05/2017
    A
    Mario 10/04/2017 A
    Mario
    18/03/2017
    A
    Mario
    18/02/2017
    BB
    Mario
    15/01/2017
    A
    Ultima modifica di hgiorgio; 24-05-2017 a 21:40

  5. #5
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Mhhhh!!! facile non è certamente
    del resto la vita è bella perche è difficile ..........

    Farlo solamente con SQL è un casino, certamente ci si arriverebbe ma diventa una roba accademica

    ci potrebbe aiutare una funzione di Access che scorre i record in un recordset e da la risposta

    dimentichiamoci dell'Id Univoco perche non siamo sicuri che sia progressivo con le date
    abbiamo la nostra univocita nella coppia Nome + Data e ce la facciamo bastare

    quindi data una tabella di nome T1 con i campi:
    - Nome ---- Testo
    - Data ----- DataOra
    - Valore ---- Testo

    creiamo in un modulo questa funzione personalizzata:
    codice:
    Option Compare Database
    Option Explicit
    
    Public Function ContaValori(Nomx As String) As Integer
    
    Dim Valx As String
    Dim Conx As Integer
    
    Dim dbx As DAO.Database
    Dim rs1 As DAO.Recordset
    
    Set dbx = DBEngine(0)(0)
    Set rs1 = dbx.OpenRecordset("SELECT Valore FROM T1 WHERE (Nome='" & Nomx & "') ORDER BY Data DESC;", dbOpenDynaset)
    
    rs1.MoveFirst
        Valx = rs1.Fields("Valore").Value
        'Conx = 0
            Do Until rs1.EOF
            If Valx = rs1.Fields("Valore").Value Then
                Conx = Conx + 1
            Else
                ContaValori = Conx
                rs1.MoveLast
            End If
            rs1.MoveNext
        Loop
    
    On Error Resume Next
    rs1.Close
    dbx.Close
    Set rs1 = Nothing
    Set dbx = Nothing
    
    End Function



    adesso (con l'aiuto della funzione) la query diventa banale
    codice:
    SELECT 
    T1.Nome, 
    Max(T1.Data) AS MaxData, 
    ContaValori([Nome]) AS ContValor
    FROM 
    T1
    GROUP BY 
    T1.Nome, 
    ContaValori([Nome])
    ;
    certamente da ottimizzare ma .......
    Facci sapere

    .
    Ultima modifica di nman; 25-05-2017 a 07:36

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.