Selezione su tabella

di il
3 risposte

Selezione su tabella

Buongiorno a tutti. Sono nuovo del forum, avrei bisogno di una dritta.
Ho necessità di estrarre, da una tabella (MiaTabella), solo il record che contiene la DATA più recente per ogni CODICEINTERNO.
Praticamente, nell'immagine in allegato, ho evidenziato in giallo i 3 record che la SELECT dovrebbe restituirmi.
Grazie in anticipo.
Allegati:
32077_8ef5cb02297deff50ff0459ea29af171.jpg
32077_8ef5cb02297deff50ff0459ea29af171.jpg

3 Risposte

  • Re: Selezione su tabella

    Davy ha scritto:


    Ho necessità di estrarre, da una tabella (MiaTabella), solo il record che contiene la DATA più recente per ogni CODICEINTERNO.
    Devi familiarizzare con la clausola GROUP BY.
    Parti da questo tutorial per le tue ricerche.

    Ciao!
  • Re: Selezione su tabella

    Ciao,
    raggruppando per CODICEINTERNO e cercando la data massima (MAX) ottieni quello che chiedevi.
  • Re: Selezione su tabella

    Salve Davy,
    in questo caso approfitterei delle funzionalita' di windowing offerte dal linguaggio T-SQL...
    trivialmente, puoi utilizzare una Common Table Expression per ordinare le righe in base al raggruppamento di CodiceInterno, e utilizzare in join questa proiezione per in join con la tabella principale per ottenere il tuo risultato desiderato, senza passare per altri tipi di raggruppamento, filtrando ancora per la "prima" riga a te interessante...

    trivialmente
    
    WITH cte AS (
    	SELECT Codice, ROW_NUMBER() OVER(PARTITION BY CodiceInterno ORDER BY Data DESC) RN
    		FROM dbo.MiaTabella
    	)
    	SELECT dbo.MiaTabella.*
    		FROM dbo.MiaTabella
    			JOIN cte ON cte.Codice = MiaTabella.Codice
    		WHERE cte.RN = 1;
    --<-----------
    Codice      CodiceInterno Certificato          Data
    ----------- ------------- -------------------- -----------------------
    4152        343750652     487/40/01            2007-07-06 00:00:00.000
    39792       1976350593    2702/63/01           2013-05-30 00:00:00.000
    ...
    
    dove, come indicato, per ogni "partizione" di CodiceInterno, ordini il risultato di ROW_NUMBER()... per Data DESC... cio' crea una colonna (RN) con valorizzazione per partizione da 1 a n per quante sono le righe... a te interessa SOLO la riga con RN = 1 per ogni partizione...

    salutoni romagnoli
    --
    Andrea
Devi accedere o registrarti per scrivere nel forum
3 risposte