|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: May 2001
Città: Bari
Messaggi: 5406
|
[SQL-SERVER] Query ricrosiva con
Ciao a tutti ragazzi.
ANZITUTTO VI CHIEDO SCUSA MA HO SBAGLIATO IL TITOLO PREMENDO INVIO INVOLONTARIAMENTE VOLEVO SCRIVERE: [SQL-SERVER] Query ricorsiva con Date Chiusura Parto subito con un esempio per spiegarvi cosa intendo realizzare. Ho una tabella cosi strutturata: Nome Istituto Conto DataInserimento IDGRP Riferimento A B C 01/01/2010 1 XX A B C 01/01/2010 2 XX A B C 02/01/2010 7 XX A B C 03/01/2010 1 XX F G H 02/01/2010 5 XX L M N 01/01/2010 5 XX L M N 02/01/2010 5 XX L M N 02/01/2010 8 XX Vorrei realizzare qualcosa del genere: Nome Istituto Conto DataInserimento IDGRP Riferimento A B C 01/01/2010 1 01/01/2010 A B C 01/01/2010 2 02/01/2010 A B C 02/01/2010 7 03/01/2010 A B C 03/01/2010 1 LAST F G H 02/01/2010 5 LAST L M N 31/12/2009 5 01/01/2010 L M N 01/01/2010 5 02/01/2010 L M N 02/01/2010 5 02/01/2010 L M N 02/01/2010 8 LAST In altre parole vorrei "marchiare" con un flag, in tal caso indicato con "LAST", il record piu recente con Nome, Istituo e Conto come parte in comune, facendo attenzione che nel caso in cui siano presenti due record uguali con stessa data (nell'esempio gli ultimi due record), ad essere contraddistinto con il flag "LAST" dovrebbe essere quello con IDGRP maggiore. Tutti gli altri record invece devono essere riempiti con la data di Inserimento del record che li SUCCEDE e con DATA_INSERIMENTO PIU VICINA a quello da flaggare. Va fatta quindi attenzione a casi come il quart'ultimo record dell'esempio, che conterrà come Riferimento la data di inserimento del record con data Inserimento 01/01/2010, e non per esempio quello del 02/01/2010. Grazie mille a tutti coloro i quali sapranno aiutarmi.
__________________
My PC:Intel Core Duo 2180/Dissipatore Zalman 9500 Led/Asus P5K/2x1GB GEIL Ultra pc6400 800mhz 4-4-4-12/Chieftec Matrix gray/Ali Lc Power 550 watt/Ati 1950 PRO 512Mb di ram ddr3/1 Hd Western Digital 300 gb 7200rpm SATA2+1 HD Samsung Spinpoint 250 GB Sata2/Asus 2232Bw/Pioneer +/-R 16X DL BLACK LightScribe Ultima modifica di MAURIZIO81 : 11-04-2011 alle 22:09. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2001
Città: Bari
Messaggi: 5406
|
Nessuno?
__________________
My PC:Intel Core Duo 2180/Dissipatore Zalman 9500 Led/Asus P5K/2x1GB GEIL Ultra pc6400 800mhz 4-4-4-12/Chieftec Matrix gray/Ali Lc Power 550 watt/Ati 1950 PRO 512Mb di ram ddr3/1 Hd Western Digital 300 gb 7200rpm SATA2+1 HD Samsung Spinpoint 250 GB Sata2/Asus 2232Bw/Pioneer +/-R 16X DL BLACK LightScribe |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
C'e' un errore
A B C 01/01/2010 1 02/01/2010 Perche' 2/1/2010 and not A B C 01/01/2010 1 01/01/2010 essendo che il record che lo succede ha proprio 1/1/2010 ?
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: May 2001
Città: Bari
Messaggi: 5406
|
Hai ragione...
CORRETTO. Come faccio a realizzare cio che voglio???
__________________
My PC:Intel Core Duo 2180/Dissipatore Zalman 9500 Led/Asus P5K/2x1GB GEIL Ultra pc6400 800mhz 4-4-4-12/Chieftec Matrix gray/Ali Lc Power 550 watt/Ati 1950 PRO 512Mb di ram ddr3/1 Hd Western Digital 300 gb 7200rpm SATA2+1 HD Samsung Spinpoint 250 GB Sata2/Asus 2232Bw/Pioneer +/-R 16X DL BLACK LightScribe |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Proverei con qualcosa come
(Ne' compilato ne' tantomeno testato) Codice:
WITH VS_tmpord AS (SELECT Nome,Istituto,Conto,DataInserimento,IDGRP, ROW_NUMBER() OVER (ORDER BY ome,Istituto,Conto,DataInserimento,IDGRP) rn FROM tabella) SELECT NOME, Istituto, Conto, DataInserimento, IDGRP, (SELECT DataInserimento from vs_tmpord invs WHERE invs.Nome=outvs.Nome AND invs.Istituto = outvs.Istituto AND invs.Conto = outvs.Conto AND invs.rn=outvs.rn+1) as Riferimento FROM vs_tmpord outvs
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:58.



















