的SQL下面返回任何记录以分钟数,它应该很好地工作:简化SQL敏声明
SELECT Id, Number
FROM TableA
WHERE Number = (select Min(Number) from TableA)
有没有办法,我可以写一个SQL 没有子Select语句,但仍返回相同结果?
的SQL下面返回任何记录以分钟数,它应该很好地工作:简化SQL敏声明
SELECT Id, Number
FROM TableA
WHERE Number = (select Min(Number) from TableA)
有没有办法,我可以写一个SQL 没有子Select语句,但仍返回相同结果?
这在MySQL 5.1中对我的作品:
SELECT Id,Number FROM TableA HAVING Number=MIN(Number);
附录
@rexem指出,原来的答案可能不会在SQL Server上运行。
我已经得到了这个方法的工作,但它很hackish。从理论上讲,如果您订购的数量,那么第一行应该是你最低,只是将搜索结果限制一行:
SELECT Id,Number FROM Table A ORDER BY Number LIMIT 1
正如我所说的,似乎草率,但得到对我所做的工作。我很抱歉无法在SQL Server而不是MySQL上测试它们。
但这是SQL Server。 MySQL对GROUP BY语句有一个宽松的政策,大多数人不这样做。 – 2009-09-25 02:21:53
我担心可能是这种情况(因此我列出了我的数据库)。我会再给它一次。感谢您的反馈。 – 2009-09-25 02:23:42
你得到的东西接近我的预期,但必须测试它 – junk 2009-09-25 04:35:43
不,你不能这样做,没有子查询。
with table_ranked(d, numb, rk) as (
select
id,
number,
row_number() over (order by number asc) as rk
from TableA
)
select
d,
numb
from table_ranked
where rk = 1
以上可能是一个想法,如果你有机会到实现with
条款和row_number
像一个Oracle 10g环境的数据库。
你能显然也做到以下几点:
select
id,
number
from (select
id,
number,
row_number() over (order by number asc) as rk
from TableA
) table_ranked
where rk = 1
这些真的都不回答你原来的问题,但可以被视为替代战略。
我没有看到你在SQL服务器上,我认为它也有一个with子句。 – 2009-09-25 02:41:34
@Simon,WITH是在SQL Server 2005中引入的。 – 2009-09-25 04:02:15
此外,SQL Server的ROW_NUMBER()函数需要OVER(ORDER BY
在MSSQL中,你可以做
select top 1 ID, Number from TableA order by Number
(类似于上面布伦特纳什的回答)
我本可以做一些类似于你的,所以我想我想看看是否有办法我可以使用Min() – junk 2009-09-25 04:35:04
尝试HAVING子句然后... – nicolaskruchten 2009-09-25 14:06:40
的OP的查询将在关系对分(数)的情况下返回多行的一些问题的答案给出到目前为止只会返回一行。
要使用TOP和ORDER BY,WITH TIES需要包括:
select top 1 with ties id, number
from TableA
order by Number
如果使用CTE或直列视图与窗口函数,RANK()而不是ROW_NUMBER()需要是使用:
; with CTE (R, ID, Number) as
(select rank() over (order by Number)
, ID, Number
from TableA)
select ID, Number
from CTE
where R = 1
此外,请在用上述之一替换您的查询之前进行基准测试。对于我用来测试的非常小的表格,OP中的查询费用低于本答案中列出的TOP WITH TIES或RANK()版本的一半。
实际上,我没有说我只想要一个记录返回。我明白有机会我会得到多个结果。另外,我正在整理存储产品中的查询,所以你到那里可能不适用 – junk 2009-09-25 04:34:12
@Junk:我的答案会给你所有匹配min(number)的记录。对于其他答案并非如此。 – 2009-09-25 05:32:31
测试我与有事业所做的:
SELECT Id, Number
FROM TableA
Group by Id, Number
Having Number = Min(Number)
结果:
ID Number
1 1
4 1
5 2
6 2
2 3
3 3
7 6
所以这是行不通的。
是的,我同意这个“select 1 ID,Number from TableA order by Number”起作用,但如果它是一个复杂的查询,它会变得很难看。
它看起来像我很高兴与什么原始查询我对现在
SELECT a.Id, a.Number FROM TableA a
inner join (select Min(Number) from TableA) m
on a.Number = m.Number
THX纠正我的问题rexem! – junk 2009-09-25 04:31:02