2009-06-25 100 views
1

我正在使用SQL Server 2008.我有一個由三列組成的表格,ID爲字符串類型,createtime爲DataTime類型,狀態爲int。如何編寫select這樣的語句?

我想在狀態值爲10的所有記錄中選擇記錄,同時createtime是最愛的。任何想法如何寫這樣的查詢?

BTW:ID是聚簇索引,我也有createtime列的索引。

由於事先 喬治

回答

9
SELECT TOP 1 * 
FROM table 
WHERE status = 10 
ORDER BY created 
+2

是一個很好的經驗法則,從來不使用*(全部)......始終指定的字段 – balexandre 2009-06-25 13:07:46

+0

@balexandre:你說得對......我知道...: ) – 2009-06-25 13:09:18

+2

對於那些懶得寫出所有字段的人,讓寫語句從表中選擇*然後標記文本並右鍵單擊「編輯器中的設計查詢」後,只需單擊確定,Visual Studio將列舉所有選中的字段的名稱聲明 – adopilot 2009-06-25 13:14:16

5
select top 1 ID, 
      CreateTime, 
      Status 
from   SourceTable 
where  Status  = 10 
order by  CreateTime 
-1
SELECT 
TOP 1 * FROM table WHERE VALUE = 10 
ORDER BY createtime 
3
SELECT TOP 1 id, createtime, status 
FROM mytable 
WHERE status = 10 
ORDER BY 
     createtime 
0

這個怎麼樣?

;WITH OrderedRows 
AS 
(SELECT ID, CreateTime, Status, ROW_NUMBER() OVER (ORDER BY CreateTime ASC) AS RowNumber 
FROM MyTable 
WHERE Status = 10) 
SELECT * FROM OrderedRows 
WHERE RowNumber = 1 
2

我不熟悉SQL Server中,具體地講,但你應該能夠有一個子查詢做到這一點:

SELECT * 
FROM Table t1 
WHERE status = 10 AND createtime = (
    SELECT min(createtime) 
    FROM Table t2 
    WHERE status = 10 
); 
2

我喜歡阿爾揚的答案,但如果你有更多的條件與「最早創建的行「部分的選擇,然後我會看看子查詢,例如

SELECT * 
FROM table 
WHERE status = 10 
AND created = (SELECT MIN(created) 
       FROM table 
       WHERE status = 10)) 

雖然這基本上是跑2個查詢,是聯合國需要爲您的要求,它給你,如果你有更多的條件與工作的更多的控制。

HTH

ONESHOT