如何仅显示SQL数据库中的SINGLE最小记录

时间:2014-01-07 23:10:19

标签: sql sql-server

在为Web应用程序创建SQL语句时,我遇到了一些小问题。

我有一个带有to_do_list(id,duration,text)的表格,我想只显示一条最小记录(持续时间=最小值),即使有多个记录。

我创造了这样的smth:

Select * from to_do_list where duration = (select min(duration) from to_do_list);

但是它显示了不止一条记录(我几乎没有相同的持续时间)。

我也试过这个:

Select id, min(duration), text from to_do_list;

但在执行此查询后,我收到错误:

“列'to_do_list.id'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

我发现LIMIT应该解决我的问题,但是在运行这个问题后我遇到了错误:

Select * from to_do_list where duration = (select min(duration) from to_do_list) LIMIT 1;

“'限制'附近的语法不正确。”

我正在使用Microsoft SQL Express Server 2012。

我将非常感谢U ppl的任何帮助!

提前致谢。

2 个答案:

答案 0 :(得分:1)

LIMIT在SQL Server中不起作用,请改用TOP

SELECT TOP 1 * 
FROM to_do_list 
WHERE duration = (SELECT MIN(duration) 
                  FROM to_do_list);

您也可以使用ROW_NUMBER()功能:

;WITH cte AS (SELECT *, ROW_NUMBER() OVER(ORDER BY duration) RN
              FROM to_do_list)
SELECT *
FROM cte
WHERE RN = 1

答案 1 :(得分:1)

在我看来,这是:

select top 1 *
from to_do_list t
order by t.duration

优于

select top 1 *
from to_do_list t
where t.duration = select min(duration) from to_do_list )

虽然值得检查执行计划,看看哪个表现更好。

相关问题