Record filtrato in base al max di un campo | SQL & MySQL

Topic: Pubblico - Composto da 7 Posts di 4 Utenti.

26 Settembre, 2011 13:53 #1
pigeonit
Utente

pigeonit
Registrato: Feb, 2011
Posts: 14
Offline

Buongiorno è molto probabile che sia una banalità ma ho l'esigenza di realizzare una query che mi restituisca un solo campo. Fin qui niente di anomalo il problema è che questo campo deve appartenere ad un record dove un'altro campo è il valore massimo. Mi spiego meglio:
supponiamo di avere una tabella chiamata tabella1 al suo interno ho due campi: data e valore io voglio che la query mi restituisca solo il campo valore associato al record che ha la data più grande esempio
data, valore
01/01/2011, 3
02/02/2011, 4
03/01/2011, 5
La query mi deve restituire 4.

Grazie

26 Settembre, 2011 15:07 #2
fuser
Utente

fuser
Registrato: Aug, 2011
Posts: 86
Offline

1SELECT valore FROM tabella1 ORDER BY data DESC LIMIT 1;

oppure

1SELECT MAX(data), valore FROM tabella1;

26 Settembre, 2011 15:30 #3
pigeonit
Utente

pigeonit
Registrato: Feb, 2011
Posts: 14
Offline

Grazie fuser. Quindi se ho capito bene, nel secondo caso, utilizzando la funzione max e non mettendo l'alias (per il campo max(data)) mi viene mostrato solo il campo valore?

26 Settembre, 2011 23:02 #4
fuser
Utente

fuser
Registrato: Aug, 2011
Posts: 86
Offline

No, nel secondo caso ti vengono mostrati tutti e due. Gli alias li puoi mettere, se vuoi.

27 Settembre, 2011 08:26 #5
pigeonit
Utente

pigeonit
Registrato: Feb, 2011
Posts: 14
Offline

Ok ho capito. Allora utilizzo la prima perché mi serve che restituisca un solo campo. Grazie mille per la risposta.

12 Dicembre, 2011 17:39 #6
pinopilotino
Utente

pinopilotino
Registrato: Dec, 2011
Posts: 1
Offline

Premetto che non sono esperto e questo topic rappresenta la soluzione al mio problema e quindi non mi posso esimere dal ringraziarvi.
Avevo intenzione di usare la seconda soluzione postata da fuser

1SELECT MAX(data), valore FROM tabella1;

dato che devo recuperare anche un secondo valore dalla tabella1.
In pratica ho una tabella1 cosi strutturata:
data, valore, valore2
01/01/2011, 3, 123
02/02/2011, 4, 4567
03/01/2011, 5, 5756
e vorrei che la select mi restituisse il record
02/02/2011, 4, 4567
dato che è quello con la data maggiore, però quando vado a scrivere la query
1SELECT MAX(data), valore, valore2 FROM tabella1;

ottengo come risultato:
02/02/2011, 3, 123
Ho provato anche a togliere il campo valore2 ma il risultato è sempre un mix dei record.
C'e' nessuno che sa spiegarmi dove sbaglio?
Un sentito rigraziamento a tutti coloro che vorrano darmi una mano.

13 Dicembre, 2011 09:57 #7
re-verse
Moderatore

re-verse
Registrato: Jul, 2008
Posts: 312
Offline

Ciao,
la funzione MAX ti prende il massimo di quella colonna, indipendentemente da tutti gli altri record - per questo ti trovi i dati misti.

prova così:

1SELECT data, valore1, valore2 FROM tabella1
2ORDER BY data DESC
3LIMIT 0,1

praticamente ordini il resultset per data (da più recente a meno recente), limitando i risultati ad un solo record.


Salvatore DC

La mente è come un paracadute: funziona solo se si apre. A.Einstein.

Condividi su:

Loggati o Registrati per replicare