Sql 具有列的最小值的行

Sql 具有列的最小值的行,sql,sql-server,Sql,Sql Server,有这种选择: 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 我希望得到最小值为N_UM的行(仅一行),在本例中,是id=10(10 0)的行。我会尝试以下方法: SELECT TOP 1 * FROM TABLE1 ORDER BY N_UM (使用SQL Server)尝试以下操作- sel

有这种选择:

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
我希望得到最小值为N_UM的行(仅一行),在本例中,是id=10(10 0)的行。

我会尝试以下方法:

SELECT TOP 1 *
FROM TABLE1
ORDER BY N_UM
(使用SQL Server)

尝试以下操作-

 select top 1 * from table where N_UM = (select min(N_UM) from table);
使用此sql查询:

select id,IDSLOT,N_UM from table where N_UM = (select min(N_UM) from table));
这里有一种方法

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 )
方法1:

SELECT top 1 * 
FROM table 
WHERE N_UM = (SELECT min(N_UM) FROM table);
方法2:

SELECT * 
FROM table 
ORDER BY N_UM 
LIMIT 1
这类问题的更一般的解决方案如下

方法3:

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

+我领先我4秒。我们需要知道RDBMS,可能是
limit
或其他东西。@Martin Smith:没错。我使用SQL Server,所以我就是这样回答的。可能应将其标记为:另外,他只想要一行。+
限制1
如果你只想要一行(像被问的那样)。同意,同意-编辑我的答案以满足所有评论。尽管如此,Adam V和我的变体更纯粹:一次选择,没有过滤。安德烈伊斯·凯尼科夫的解决方案不应该比双选更快吗?为什么在
而不是
=
?这可能会导致MySQL中出现性能问题。错误:1。将返回多行,2。对于这样一个简单的任务,两次选择并不是一个选项。为了完整性起见,如果有多行具有相同的最小值,您希望看到什么行为?是否要返回所有匹配的行?返回ID最大的单行?最小的身份证?任何一个?你不是指按N_UM
顺序吗?这是一个通用的例子。用您需要的任何名称替换表名和列名。这非常好。并非所有DB都支持“TOP”,我在所有其他建议中都遇到语法错误。谢谢,非常优雅。类似地,如果有人需要max,则
从表中选择*按列的名称顺序\u NAME desc limit 1
问题被标记为sql server。SQL Server不支持
limit
关键字哪个更快?我想是第二种方法吧?
SELECT * 
FROM table 
ORDER BY N_UM 
LIMIT 1
SELECT *
FROM table 
WHERE N_UM IN (SELECT MIN(N_UM) FROM table);