79 messaggi dal 05 aprile 2005
come faccio dalla seguente query ad ottenere tutte le massime revioni di ogni codice_documento??????

ad esempio: io vorrei che il record con codice_documento = 14 mi apparisse una sola volta ma con la
massima revisione....

select documenti_societa_sedi.id, documenti_societa_sedi.codice_documento,
documenti_societa_sedi.id_sede_societa, documenti_societa_sedi.id_societa,
documenti.descrizione, documenti.file_fisico, documenti.revisione, documenti.data,
utenti.login
from documenti_societa_sedi, documenti, utenti where
(documenti_societa_sedi.codice_documento=documenti.codice and
utenti.id = documenti.id_utente and documenti_societa_sedi.id_societa='0')

id codice_documento id_sede_societa id_societa descrizione file_fisico revisione data login
----- ---------------- --------------- ----------- --------------------------------------- ----------- -------
16 14 0 0 miro_R2 miro_R2.htm 2 20071218 paolo
17 13 0 0 pluino_R1 pluino_R1.zip 1 20071218 andrea
18 14 0 0 miro_R1 miro_R1.htm 1 20071218 roberto
19 15 0 0 trollino_R1 trollino_R1.jpg 1 20071218 andrea
20 15 0 0 trollino_R2 trollino_R2.jpg 2 20071218 luciano
21 15 0 0 trollino_R3 trollino_R2.jpg 3 20071218 paolo

io vorrei ottenere questo

id codice_documento id_sede_societa id_societa descrizione file_fisico revisione data login
----- ---------------- --------------- ----------- --------------------------------------- ----------- -------
16 14 0 0 miro_R2 miro_R2.htm 2 20071218 paolo
17 13 0 0 pluino_R1 pluino_R1.zip 1 20071218 andrea
21 15 0 0 trollino_R3 trollino_R2.jpg 3 20071218 paolo


come si fa?????
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
Se ho capito bene vuoi raggruppare i dati per codice_documento e prendere per ciascun codice documento solo il valore massimo per il campo revisione (e fin qui sarebbe facile) ma avere anche tutte le altre informazioni presenti nel record con max revisione. Se ho centrato il problema puoi risolvere spezzando il problema in 2 parti, ovvero trovare prima il valore massimo di revisione per ciascun codice_documento con una query tipo

SELECT codice_documento, MAX(revisione) as maxrev
FROM dbo.MyTable
GROUP BY codice_documento

adesso che hai questo risultato utilizzi questa query come una tabella derivata da mettere in relazione con la tabella dbo.MyTable

SELECT campichevuoi
FROM (SELECT codice_documento, MAX(revisione) as maxrev
FROM dbo.MyTable
GROUP BY codice_documento) AS A INNER JOIN dbo.MyTable B
ON A.codice_documento = B.codice_documento
AND A.maxrev = B.revisione

Per semplicità ho preferito non riprodurre l'esempio sulla base della tua query perchè sarebbe risultato meno leggibile. Ti consiglio comunque di non mescolare le condizioni di join nella condizione di ricerca ma di utilizzare la sintassi di join come ho fatto io.
79 messaggi dal 05 aprile 2005
ora provo..... sei come il messia......
79 messaggi dal 05 aprile 2005
SELECT *
FROM (SELECT codice, MAX(revisione) as maxrev
FROM documenti
GROUP BY codice) AS A INNER JOIN documenti_societa_sedi as B
ON A.codice = B.codice_documento
AND B.id_societa=0


ok!!!!! ci siamo quasi.... ora ti devo chiedere ancora una cosetta.... ed è qui per me il difficilissimo....

dove scrivo i campi legati al record con massima versione visto che ragruppo per codice????

o meglio il campo codice non è univoco, lo uso come identificatore dello stesso documento che puo evere piu' revisioni e di conseguenza piu' record....
il campo codice=15 della tabella documenti puo appartenere a piu' record con campi data, id_utente e file diversi....
in altre parole non so se posso fare il group by codice perche' non riuscirei a raggruppare ad esempio i file o gli utenti (perche' sono diversi)

è scritta davvero male nel mio post precedente

id |codice | altri campi

16 | 14 | 0 | 0 | a_R2.htm | 2 | 20071218 | paolo
17 | 13 | 0 | 0 | x_R1.zip | 1 | 20071218 | andrea
18 | 14 | 0 | 0 | a_R1.htm | 1 | 20071218 | roberto
19 | 15 | 0 | 0 | c_R1.jpg | 1 | 20071218 | andrea
20 | 15 | 0 | 0 | c_R2.jpg | 2 | 20071218 | luciano
21 | 15 | 0 | 0 | c_R3.jpg | 3 | 20071218 | paolo

io dovrei estrapolare i record con
id =16, 17, 21 e tutte le informazioni del record

e poi come faccio a scriverli in quella join......


grazie 1000 per la cortese attenzione....
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
andreapavia ha scritto:
SELECT *
FROM (SELECT codice, MAX(revisione) as maxrev
FROM documenti
GROUP BY codice) AS A INNER JOIN documenti_societa_sedi as B
ON A.codice = B.codice_documento
AND B.id_societa=0


Fermati. Questa query non assomiglia neanche lontanamente a quella che io ti ho proposto nel mio esempio. E' corretta la query che definisce la tabella derivata, ovvero la parte

SELECT codice, MAX(revisione) as maxrev
FROM documenti
GROUP BY codice

ma poi se guardi il mio esempio ti accorgerai che io ho messo in join CON QUESTA QUERY LA STESSA TABELLA UTILIZZATA in questa query (che nel tuo caso si chiama documenti). Inoltre come condizione di join devi aggiungere il secondo criterio, ovvero di mettere in relazione la tabella derivata non solo con il campo codice ma ANCHE per il campo revisione/maxrev. Fatto questo puoi mettere nella select list tutti i campi che vuoi che siano presenti nella tabella documenti. Poi puoi ulteriormente proseguire aggiungendo join con altre tabelle/viste/udf... ma se non vai per step diventa molto facile sbagliare...

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.