的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