我正在使用SQL Server 2008.我有一个由三列组成的表,ID为字符串类型,createtime为DataTime类型,状态为int。
我想在状态值为10的所有记录中选择记录,同时createtime是最早的记录。任何想法如何写这样的查询?
BTW:ID是聚集索引,我也有创建时间列的索引。
提前谢谢, 乔治答案 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