hobby:development:sql:select:query_0001

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Prossima revisione
Revisione precedente
hobby:development:sql:select:query_0001 [2021/01/04 10:22] – creata mauro.cortesehobby:development:sql:select:query_0001 [2021/01/04 12:35] (versione attuale) mauro.cortese
Linea 1: Linea 1:
-{{:wiki:t-sql.png?nolink&90 |}} <fs xx-large>Auto self-join per raggruppare in base ad un criterio</fs> +{{:wiki:icons:t-sql.png?nolink&90 |}} <fs xx-large>Auto self-join per raggruppare in base ad un criterio</fs> 
-[[hobby:development:sql|{{ :wiki:icons:left-arrow-icon.png?48|Vai alla mappa}}]]\\+[[hobby:development:sql|{{ :wiki:icons:left_arrow.png?48|Vai alla mappa}}]]\\
 //<fc #5F5F5F><fs large>(Come eseguire un self join per filtrare il raggruppamento ottenuto)</fs></fc>// //<fc #5F5F5F><fs large>(Come eseguire un self join per filtrare il raggruppamento ottenuto)</fs></fc>//
 \\ \\
 \\ \\
-Il problema in analisi è quello che si presenta ogni volta che si vuole ottenere l'ultima versione del dato di una determinata anagrafica.+Il problema in analisi è quello che si presenta ogni volta che si vuole ottenere l'ultima versione del dato di una determinata anagrafica.\\ 
 Un esempio molto semplice potrà far capire meglio di tante spiegazioni Un esempio molto semplice potrà far capire meglio di tante spiegazioni
  
 Serviamoci della seguente tabella di esempio: Serviamoci della seguente tabella di esempio:
-<code sql> +<sxh sql> 
-USE DbTmp+USE DbTemp
  
 IF OBJECT_ID(N'dbo.tblHistory', 'U') IS NOT NULL IF OBJECT_ID(N'dbo.tblHistory', 'U') IS NOT NULL
-    DROP TABLE dbo.tblHistory+ DROP TABLE dbo.tblHistory
  
 -- Create table [dbo].[tblHistory] -- Create table [dbo].[tblHistory]
Linea 18: Linea 18:
  
 CREATE TABLE dbo.tblHistory ( CREATE TABLE dbo.tblHistory (
-  IdHistory INT NULL DEFAULT (0), +  IdHistory INT NULL DEFAULT (0) 
-  IdData int NULL DEFAULT (0), + ,IdData int NULL DEFAULT (0) 
-  Description varchar(50) NULL DEFAULT (''),+ ,Description varchar(50) NULL DEFAULT ('')
 ) )
 ON [PRIMARY] ON [PRIMARY]
-</code>+</sxh>
  
 che andremo a popolare con pochi dati ma sufficienti per capire che andremo a popolare con pochi dati ma sufficienti per capire
  
-<code sql> +<sxh sql> 
-INSERT INTO dbo.tblHistory (IdHistory, IdData, Description)  +INSERT INTO dbo.tblHistory (IdHistory, IdData, Description) VALUES 
-VALUES +   (1,  1, 'Descrizione primo record'
- (1, 1, N'Descrizione primo record'+ ,(2,  1, 'Descrizione primo record prima modifica'
-,(2, 1, N'Descrizione primo record prima modifica'+ ,(3,  1, 'Descrizione primo record ultima modifica'
-,(3, 1, N'Descrizione primo record ultima modifica'+ ,(4,  2, 'Descrizione secondo record'
-,(4, 2, N'Descrizione secondo record'+ ,(5,  2, 'Descrizione secondo record prima modifica'
-,(5, 2, N'Descrizione secondo record prima modifica'+ ,(6,  2, 'Descrizione secondo record ultima modifica'
-,(6, 2, N'Descrizione secondo record ultima modifica'+ ,(7,  3, 'Descrizione terzo record'
-,(7, 3, N'Descrizione terzo record'+ ,(8,  3, 'Descrizione terzo record ultima modifica'
-,(8, 3, N'Descrizione terzo record ultima modifica'+ ,(9,  4, 'Descrizione quarto record'
-,(9, 4, N'Descrizione quarto record'+ ,(10, 4, 'Descrizione quarto record ultima modifica'
-,(10, 4, N'Descrizione quarto record ultima modifica'+</sxh>
-</code>+
  
 quindi con una semplice select otterremo: quindi con una semplice select otterremo:
  
-<code sql>+<sxh sql>
 SELECT * FROM dbo.tblHistory; SELECT * FROM dbo.tblHistory;
-</code>+</sxh>
  
 ^IdHistory^IdData^Description^ ^IdHistory^IdData^Description^
Linea 64: Linea 63:
 La soluzione è relativamente semplice e consiste nel ricorrere ad un self-join come quello che segue: La soluzione è relativamente semplice e consiste nel ricorrere ad un self-join come quello che segue:
  
-<code sql>+<sxh sql>
 SELECT  SELECT 
-    tblA.*+ tblA.*
 FROM tblHistory tblA FROM tblHistory tblA
-  LEFT JOIN tblHistory tblB ON tblA.IdData = tblB.IdData AND tblA.IdHistory < tblB.IdHistory+ LEFT JOIN tblHistory tblB ON tblA.IdData = tblB.IdData AND tblA.IdHistory < tblB.IdHistory
 WHERE tblB.IdHistory IS NULL WHERE tblB.IdHistory IS NULL
-</code>+</sxh>
  
 ^IdHistory^IdData^Description^ ^IdHistory^IdData^Description^
  • hobby/development/sql/select/query_0001.1609752178.txt.gz
  • Ultima modifica: 2021/01/04 10:22
  • da mauro.cortese