2010-10-01 23 views
20

Tener esta selección:fila con valor mínimo de una columna

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 

me gustaría obtener la fila (sólo uno) que tiene el valor mínimo de N_UM, en este caso la fila con id = 10 (10 0).

+2

En aras de la exhaustividad, qué comportamiento qué se puede esperar si tiene varias filas con el mismo valor mínimo? ¿Te gustaría devolver todas las filas que coincidan? ¿Devuelve la única fila con la identificación más grande? Identificación más pequeña? ¿Cualquiera de los dos? –

Respuesta

15

probar este -

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

Además, solo quería una fila. – Sage

+4

+ 'Limite 1' si solo quiere 1 fila (como se le pide). – Shikiryu

+1

De acuerdo, acordado: edité mi respuesta para satisfacer todos los comentarios. –

17

me gustaría probar este:

SELECT TOP 1 * 
FROM TABLE1 
ORDER BY N_UM 

(utilizando SQL Server)

+0

+1 Gástame por 4 segundos. Sin embargo, necesitamos saber RDBMS como podría ser 'limit' o algo más. –

+0

@Martin Smith: cierto verdadero. Yo uso SQL Server, así que simplemente lo respondí de esa manera. Probablemente debería marcarlo como tal. :) –

6

Utilice esta consulta SQL:

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

¿Por qué 'in' en lugar de' = '? Esto puede causar problemas de rendimiento en MySQL. –

+0

gracias, corregido –

+0

Incorrecto: 1. devolverá varias filas, 2. dos selecciones para una tarea tan simple no es una opción –

1

Aquí está un enfoque

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

¿No quiere decir 'ordenar por N_UM'? – egrunin

+2

Este es un ejemplo genérico. Sustituya los nombres de tabla y columna con lo que necesite. –

+1

Esto es excelente. No todos los DB admiten "TOP" y obtuve errores de sintaxis en todas las otras sugerencias. Gracias. –

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

Método 1:

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

Método 2:

SELECT * 
FROM table 
ORDER BY N_UM 
LIMIT 1 

una solución más general para esta clase de problema es el siguiente.

Método 3:

SELECT * 
FROM table 
WHERE N_UM IN (SELECT MIN(N_UM) FROM table); 
Cuestiones relacionadas