2009-06-25 140 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