Sql 如何像这样编写select语句?

Sql 如何像这样编写select语句?,sql,sql-server,Sql,Sql Server,我正在使用SQLServer2008。我有一个由三列组成的表,ID为string类型,createtime为DataTime类型,status为int 我想在状态值为10的所有记录中选择记录,同时createtime是最早的记录。你知道怎么写这样的查询吗 顺便说一句:ID是聚集索引,我在createtime列上也有索引 提前感谢,, 乔治这个怎么样 ;WITH OrderedRows AS (SELECT ID, CreateTime, Status, ROW_NUMBER() OVER (OR

我正在使用SQLServer2008。我有一个由三列组成的表,ID为string类型,createtime为DataTime类型,status为int

我想在状态值为10的所有记录中选择记录,同时createtime是最早的记录。你知道怎么写这样的查询吗

顺便说一句:ID是聚集索引,我在createtime列上也有索引

提前感谢,, 乔治这个怎么样

;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
这个怎么样

;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

具体来说,我不熟悉SQL Server,但您应该能够通过一个子选择来实现这一点:

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

具体来说,我不熟悉SQL Server,但您应该能够通过一个子选择来实现这一点:

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

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

SELECT *
FROM table
WHERE status = 10 
AND created = (SELECT MIN(created)
               FROM table
               WHERE status = 10))
虽然这基本上运行2个查询,并且对于您的需求来说是不必要的,但是如果您有更多的标准可以使用,它会为您提供更多的控制


OneSHOT

我更喜欢Arjan的答案,但如果您有更多的条件,选择“最早创建的行”部分,那么我会查看子查询,例如

SELECT *
FROM table
WHERE status = 10 
AND created = (SELECT MIN(created)
               FROM table
               WHERE status = 10))
虽然这基本上运行2个查询,并且对于您的需求来说是不必要的,但是如果您有更多的标准可以使用,它会为您提供更多的控制


一次性的

作为一个好的经验法则,永远不要使用*(全部)。。。始终指定字段对于那些懒得逐个写入所有字段的字段,让write语句从表中选择*,然后标记文本并右键单击“在编辑器中设计查询”,然后仅单击“确定”,Visual studio将枚举所选语句中所有字段的名称作为一个良好的经验法则,永远不要使用*(全部)。。。始终指定字段对于那些懒得逐个写入所有字段的字段,让write语句从表中选择*,然后标记文本并右键单击“编辑器中的设计查询”,然后仅单击“确定”,Visual studio将枚举所选状态中所有字段的名称。什么?您的语句不完整,语法无效。orderby什么?您的语句不完整且语法无效。为什么在没有提供解释的情况下对此进行了否决?这是一个正确的答案。为什么投票被否决而没有提供解释?这是一个正确的答案。
SELECT *
FROM table
WHERE status = 10 
AND created = (SELECT MIN(created)
               FROM table
               WHERE status = 10))