在为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的任何帮助!
提前致谢。
答案 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 )
虽然值得检查执行计划,看看哪个表现更好。