[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