Newsgroup: it.comp.appl.access
Titolo: Query: selezionare set record per data maggiore su raggruppamento parziale

Ciao ragazzi, premetto una cosa, son giorni che provo a cercare una
soluzione nel newsgroup dopo averci studiato da sola, quindi chiedo
venia se fosse già stato chiesto, ma non l'ho trovato!
La mia esigenza è questa, da una tab strutturata più o meno così:
Campo1          Campo2         Campo3
A                    01/05/05         verde
A                    05/10/05         rosso
A                    18/03/05         blu
B                    02/06/05         giallo
B                    26/01/05         nero
Vorrei raggruppare per Campo1 determinare la data maggiore in Campo2 e
vedere il resto delle informazioni del record abbinato alla Data
Maggiore!
Cioè:
Campo1          Campo2          Campo3      CampoID      etc....
A                    05/10/05         rosso
B                    02/06/05         giallo
Invece cosa succede quando eseguo una query di raggruppamento? essendo
costretta a raggruppare tutti i campi che voglio visualizzare, le info
si mescolano ed io non so se sbaglio ad usare la qry di raggruppamento
anzichè un altra, oppure se esiste un criterio, un opzione o che so
per dirgli di prelevare esattamente l'info così come da es.
So di essere arrugginita, nel corso dell'ultimo anno i miei problemi si
son attorniati su pannolini sporchi, pappe, biberon, levatacce notturne
ecc ecc ...
spero di avervi commosso a tal punto da indurvi ad aiutare una
neo-mamma a rimettersi un po' in linea con la programmazione in Access!
Grazie
Sha

son attorniati su pannolini sporchi, pappe, biberon, levatacce notturne
auguri :-)
Ciao
-- 
Giorgio Rancati
[Office Access MVP]

 auguri :-)
Grazie
Sha


Ma provo anche la tua seconda soluzione:
[CUT]
 e poi ti faccio sapere!
be, no, otterresti un risultato identico alla prima query, a parità di data
hai bisogno di un campo che differisca le righe, ad esempio un contatore.


 hai bisogno di un campo che differisca le righe, ad esempio un contatore.
se hai un campo ID contatore potresti fare così
----
SELECT *
FROM  Tabella1
WHERE ID=(Select TOP 1 ID
          FROM Tabella1 Tb1
          WHERE Tabella1.Campo1=Tb1.Campo1
          ORDER BY Campo2 DESC,ID DESC)
----


Siam collegati in contemporanea!!!
OK allora il campo ID c'è ora provo a fare come suggerisci!
tx
Sha

Posso quasi dichiarare il mio amore per te! ;)
Solo che non riesco a finire di controllare tutti i dati ed essere
sicura che ho tutto correttamente!
In effetti questo criterio mi appesantisce notevolmente la selezione
(è una query su query!) sto studiandomi come risolvere la cosa!
Volevo finire prima di scrivere ma visto che son passati gg non volevo
sembrare irriconoscente!
Quindi grazie, ma non appena riuscirò a finire riscriverò la stringa!
Sha

Sha
:-)


(è una query su query!) sto studiandomi come risolvere la cosa!
Ciao Shanty,
prova questa, al posto della subquery utilizza le tebelle derivate.
Impiega 1 secondo con 100.000 record
----
SELECT Tabella1.*
FROM Tabella1 INNER JOIN
    (SELECT Campo1,Max(Campo2) AS MaxDiCampo2,LAST(Id) AS LastDiId
     FROM (SELECT TOP 100 PERCENT Campo1,Campo2,Id
           FROM Tabella1
           ORDER BY Campo1,Campo2,Id) AS Tx
    GROUP BY Campo1) Ty
    ON Tabella1.Id=Ty.LastDiId
----
la *TOP 100 PERCENT * nella seconda tabella derivata è determinante per il
corretto funzionamento, se non la metti il LAST(ID) ritorna l'ultimo ID
insetiro in tabella per quel raggruppamento e non l'ultimo ID determinato
dall'order By per quel raggruppamento.


 [Office Access MVP]
Mi correggo, son proprio costretta ad amarti!
Fantastico, fuori nevica da paura, tutti che mi dicono di andar a casa,
io testarda son rimasta apposta per provare la tua query e ta dan ...
perfetta!!!
Solo una piccola modifica:
nel SELECT van indicati tutti i campi coinvolti, perchè Access è
permaloso e non vuole l'asterisco per dei campi con delle formule ...
va bhe!
indi diventa:
----
 SELECT Tabella1.Campo1,Tabella1.Campo2,Tabella1.id
 FROM Tabella1 INNER JOIN
     (SELECT Campo1,Max(Campo2) AS MaxDiCampo2,LAST(Id) AS LastDiId
      FROM (SELECT TOP 100 PERCENT Campo1,Campo2,Id
            FROM Tabella1
            ORDER BY Campo1,Campo2,Id) AS Tx
     GROUP BY Campo1) Ty
     ON Tabella1.Id=Ty.LastDiId
 ----
Va, funzia alla velocità della luce ed io son commossa: era dai tempi
di SqlBase che non creavo delle query così!
Ti ringrazio davvero tanto per avermi aiutata a togliermi un po' di
ruggine, da sola ora come ora, non ci sarei mai riuscita!
Sha

Sha


 Ciao
me lo vedo a Giorgio con la lingua da fuori e carta vetro in mano...
molto divertente.
-- 
_ _
Ciao
MAssimiliano Amendola            
www.accessgroup.it
Cisa - Conferenza Italiana per Sviluppatori Access
Info:  
www.donkarl.com/it

 molto divertente.
LOL
MA, sei una peste !!
comunque per il momento ho il badile in mano, qui sta nevicando a più non
posso.


 non posso.
Io invece sto uscendo con la canotta..
non so se ho il sex appeal di Costantino o Bossi...
Mah


di SqlBase che non creavo delle query così!
ieri sera, per curiosità, ho posto il quesito su microsoft.public.it.sql,
(Ng dedicato a Ms Sql Server) chiedendo se era possibile fare una query
alternativa senza l'utilizzo della subquery nella clausola Where.
Ne è uscito qualcosa di interessante
----
SELECT t1.*
FROM Tabella1 t1 Inner Join
     (SELECT max (id) as MaxIDPerTipo
      FROM Tabella1 t1 Inner Join
          (SELECT Campo1, Max (Campo2) as MaxCampo2
           FROM Tabella1
           GROUP BY Campo1
           ) s ON t1.Campo1= s.Campo1 and t1.Campo2= s.MaxCampo2
   GROUP BY t1.Campo1, t1.Campo2) pk
 ON 
t1.id
= pk.MaxIDPerTipo
----
questa query è da preferirsi alla mia perchè rimane in un ambito ANSI (non
c'è la funzione LAST()) e non usa ordinamenti nella tabella derivata.


 --
Urca non avevo notato questa aggiunta ... mi ero fermata alla
Canotta!!!! he he he
da provare subito! .... la canotta naturalmente!!!
Sha

Allora, sempre con un po' di giorni alle spalle ma ti posso garantire
di aver provato bene e il responso è questo:
la nuova soluzione è perfettamente funzionante, i dati risultanti
combaciano perfettamente
MA
la tua è decisamente più veloce!!! ^_^
INDI
chi volesse cimentarsi in una query del genere può usare
tranquillamente entrambe.
Grazie ancora di tutto
Shanty