如何写这样的select语句?

时间:2009-06-25 13:02:39

标签: sql sql-server

我正在使用SQL Server 2008.我有一个由三列组成的表,ID为字符串类型,createtime为DataTime类型,状态为int。

我想在状态值为10的所有记录中选择记录,同时createtime是最早的记录。任何想法如何写这样的查询?

BTW:ID是聚集索引,我也有创建时间列的索引。

提前谢谢, 乔治

7 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:5)

select top 1 ID,
             CreateTime,
             Status
from         SourceTable
where        Status      = 10
order by     CreateTime

答案 2 :(得分:3)

SELECT  TOP 1 id, createtime, status
FROM    mytable
WHERE   status = 10
ORDER BY
        createtime

答案 3 :(得分:2)

我不熟悉SQL Server,但是你应该能够通过子选择来实现它:

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

答案 4 :(得分:2)

我更喜欢Arjan的答案,但是如果你对选择的“最早创建的行”部分有更多的标准,那么我会查看子查询,例如。

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

虽然这实际上运行了2个查询,并且对于您的要求不是必需的,但如果您有更多的标准可以使用,它可以为您提供更多控制。

HTH

单稳

答案 5 :(得分: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

答案 6 :(得分:-1)

SELECT
TOP 1 * FROM table WHERE VALUE = 10 
ORDER BY createtime