2010-10-01 15 views
20

Avendo questa selezione:riga con il valore minimo di una colonna

id IDSLOT N_UM 
------------------------ 
1 1 6 
2 6 2 
3 2 1 
4 4 1 
5 5 1 
6 8 1 
7 3 1 
8 7 1 
9 9 1 
10 10 0 

Vorrei ottenere la riga (unico) che ha il valore minimo di N_UM, in questo caso la riga con id = 10 (10 0).

+2

Per ragioni di completezza, quale comportamento ci si può aspettare se si dispone di più righe con lo stesso valore minimo? Vorresti restituire tutte le righe che corrispondono? Restituisce la singola riga con l'ID più grande? ID più piccolo? Uno a scelta? –

risposta

15

Prova questa -

select top 1 * from table where N_UM = (select min(N_UM) from table); 
+1

in più, voleva solo una riga. – Sage

+4

+ 'Limite 1' se si desidera solo 1 riga (come richiesto). – Shikiryu

+1

Concordato, d'accordo - Modificato la mia risposta per soddisfare tutti i commenti. –

17

Mi piacerebbe provare questo:

SELECT TOP 1 * 
FROM TABLE1 
ORDER BY N_UM 

(utilizzando SQL Server)

+0

+1 Batti di 4 secondi. Abbiamo bisogno di conoscere RDBMS anche se potrebbe essere 'limite' o qualcos'altro. –

+0

@ Martin Smith: vero vero. Io uso SQL Server, quindi ho appena risposto in questo modo. Dovrebbe probabilmente segnarlo come tale. :) –

6

Utilizzare questa query SQL:

select id,IDSLOT,N_UM from table where N_UM = (select min(N_UM) from table)); 
+0

Perché 'in' anziché' = '? Questo può causare problemi di prestazioni in MySQL. –

+0

grazie, corretto –

+0

Sbagliato: 1. restituirà più righe, 2. due selezioni per un'attività così semplice non è un'opzione –

1

Ecco un approccio

Create table #t (
id int, 
IDSLOT int, 
N_UM int 
) 
insert into #t (id, idslot, n_um) 
VALUES (1, 1, 6), 
(2,6,2), 
(3,2,1), 
(4,4,1), 
(5,5,1), 
(6,8,1), 
(7,3,1), 
(8,7,1), 
(9,9,1), 
(10, 10, 0) 

select Top 1 * 
from #t 
Where N_UM = (select MIN(n_um) from #t) 
19
select * from TABLE_NAME order by COLUMN_NAME limit 1 
+0

Non intendi "ordina per N_UM"? – egrunin

+2

Questo è un esempio generico. Sostituisci i nomi delle tabelle e delle colonne con qualsiasi cosa ti serva. –

+1

Questo è eccellente. Non tutti i DB supportano "TOP" e ho riscontrato errori di sintassi su tutti gli altri suggerimenti. Grazie. –

0
select TOP 1 Col , COUNT(Col) as minCol from employee GROUP by Col 
order by mindep asc 
2

Metodo 1:

SELECT top 1 * 
FROM table 
WHERE N_UM = (SELECT min(N_UM) FROM table); 

Metodo 2:

SELECT * 
FROM table 
ORDER BY N_UM 
LIMIT 1 

Una soluzione più generale a questa classe di problema è il seguente.

Metodo 3:

SELECT * 
FROM table 
WHERE N_UM IN (SELECT MIN(N_UM) FROM table); 
Problemi correlati