Newsgroup: it.comp.www.php
Titolo: query con group by

Salve a tutti,
eseguo la seguente query:
SELECT * FROM a GROUP BY nome
ma cosi', se p.e., la mia tabella contiene questi dati:
TABLE a
id - nome - giorno - ore
------------------------
1   pinco    10/07     2
2   tizio      11/07     3.5
3   pinco    11/07     3
4   pinco    12/07     4
5   tizio      12/07     3
6   tizio      12/07     7
mi viene restituito il primo record del gruppo pinco e il primo del
gruppo tizio, ma io avrei bisogno del contrario, cioe' dell'ultimo.
Com'e' che si fa?
Grazie mille
Matteo

 SELECT * FROM a GROUP BY nome
La clausola GROUP BY esegue un raggruppamento virtuale sulle tuple in modo
da permettere operazioni quali SUM, ...
La query che tu fai non ha molto senso cosě com'č.
Potresti fare una cosa del tipo:
SELECT DISTINCT nome
FROM a
ORDER BY nome;
Oppure se vuoi usare la GROUP BY puoi, ad esempio:
SELECT nome, SUM(ore)
FROM a
GROUP BY nome
ORDER BY nome
Che ti visualizza le ore totali svolte da ogni "nome".
Ciao
Marco

 ORDER BY nome;
Ciao Marco e grazie per avermi risposto.
Ho capito cosa vuoi ed hai perfettamente ragione riguardo l'uso di GROUP
BY.
Specifico meglio il problema; supponiamo la mia tabella sia questa:
TABLE a
id - nome - giorno - ore
------------------------
1   pinco    10/07     2
2   tizio      11/07     3.5
3   pinco    11/07     3
4   pinco    12/07     4
5   tizio      12/07     3
6   tizio      13/07     7
NB: giorno e' in formato timestamp
Vorrei effettuare una query che mi restituisse soltanto 2 record, uno
relativo a pinco ed uno a tizio e che i 2 record siano quelli dove
giorno (che, ripeto, e' timestamp)  e' il piu' recente. In questo caso
sarebbero i record 4 e 6.
Puoi aiutarmi?
Nel frattempo leggero' dal manuale mysql a cosa serve DISTINCT.
Grazie mille
Matteo

 ORDER BY nome;
Se da questa tabella:
TABLE a
id - nome - giorno - ore
------------------------
1   pinco    10/07     2
2   tizio      11/07     3.5
3   pinco    11/07     3
4   pinco    12/07     4
5   tizio      12/07     3
6   tizio      13/07     7
Eseguo un
SELECT DISTINCT nome
FROM a
ORDER BY nome
va tutto bene. Ma io ho bisogno anche degli altri dati della tabella. In
particolare mi servono le date piu' recenti (le righe 4 e 6) e se
modifico cosi' la mia query
SELECT DISTINCT nome,giorno,ore
FROM a
ORDER BY nome
Va tutto a catafascio (vengono visualizzati tutti i record).
Sigh :-)
Matteo

 Nel frattempo leggero' dal manuale mysql a cosa serve DISTINCT.
Restituisce i record univoci, ossia elimina i doppioni.
Ciao
Marco

 ha scritto nel messaggio
news:bg2rti$k49cl$1...@ID-85903.news.uni-berlin.de...


 Restituisce i record univoci, ossia elimina i doppioni.
Ho letto. Da come l'ho capita non mi aiuta in questo problema....
Grazie del prezioso aiuto datomi finora
Matteo

 Puoi aiutarmi?
SELECT T1.nome FROM TABLE a as T1, a as T2 WHERE
        T1.nome=T2.nome and T1.giorno>T2.giorno
ciao
Alesi_27

 se non ho capito male, prova ad aggiungere un order by giorno desc
limit 0,2
Cioe' intendi cosi':
SELECT DISTINCT nome
FROM a
ORDER BY giorno DESC
LIMIT 0,2
Mi genera l'errore
You have an error in your SQL syntax near 'LIMIT -1' at line 1
Matteo

 news:bg2q3m$d2b$1...@news2.isdnet.net...
questo SQL fa quello che dici tu:
SELECT 
prova1.id
, prova1.Nome, prova1.giorno, prova1.ore
FROM prova1
GROUP BY  
prova1.id
, prova1.Nome, prova1.giorno, prova1.ore
ORDER BY prova1.giorno DESC;
questo è il risultato
id	Nome	giorno	      ore
6	tizio	13-lug-03	7
4	pinco	12-lug-03	4
5	tizio	12-lug-03	3
2	tizio	11-lug-03	4
3	pinco	11-lug-03	3
1	pinco	10-lug-03	2
Ciao Gianfranzo
-- 
--
ICQ#: 21258924
Nick Gianfranzo
Home page 
http://www.gianfranzo.it
Gianfranzo è contro la guerra
--