[Db] query quiz
Domenico L.
domenico.lorusso a pleiade.it
Mar 20 Mar 2007 14:21:02 CET
Marcello Vezzelli ha scritto:
>
> Premetto che la soluzione che ho postato funziona, e ho anche capito
> perché...
> però mi interessava anche capire il tuo approccio.
>
> Non ho capito a cosa serve min(dataora).
Serve perché verosimilmente la prima delle risposte sarà quella inserita
prima
>
> Alla fine è il GROUP BY che mi dà i primi record che mi servono.
Allora questa group by fa cose misteriose....
La group by dice: raggruppa per i seguenti campi (che devono essere
specificati)
ipotizza:
idA idB cifra
1 2 25
1 2 37
3 2 60
3 2 45
3 3 25
se faccio una group by su idA e idB mi aspetto 3 record, quindi posso
scrivere:
select idA, idB
from myTab
group by idA, idB
bene cifra qui cosa ci posso fare? posso usare una funzione di aggregazione:
avg,sum,count,min,max ecc...
Questo è l'approccio standard, sembra che mysql utilizza una funzione di
default (che probabilmente è la min)
> e funziona SOLO se l'id è ordinato come le date (e infatti è così).
esatto, però io stavo anche parlando di come si scrive una query in sql
(non dialetto di mysql), per carità io sono a favore dei vantaggi dei
dialetti... non quando però hanno comportamenti "magici", o comunque
poco chiari
Inoltre con la mia soluzione se volessi prendere l'ultima risposta ti
basta cambiare min in max
>
> Se c'è un id successivo a un altro ma che però ha dataora precedente,
> il gioco non funziona più e min(dataora) non mi aiuta.
min(dataora) ti aiuta invece. perché se ne frega degli id ti ritorna la
prima risposta.
ti riscrivo la query con la join:
select r.descrizione, s.*
from risposte s, richieste r,
(
select rif_utente, rif_domanda, min(dataora) dataora
from risposte
where rif_utente=1
group by rif_utente, rif_domanda
) s1
where s.rif_utente=s1.rif_utente
and s.rif_domanda=s1.rif_domanda
and s.dataora=s1.dataora
and r.id=s.rif_domanda
Stai dicendo:
fissato rif_utente e rif_domanda estrai la risposta che ha la data
uguale alla minima data
relativa a rif_utente e rif_domanda
ciao
--
Domenico L. icq: 645 44 861
per stupire mezz'ora basta un libro di storia,
io cercai di imparare la Treccani a memoria... [F.d.A.]
Maggiori informazioni sulla lista
Db