2009-06-25 3 views
1

SQL Server 2008을 사용하고 있습니다. 문자열 형식의 ID, DataTime 형식의 createtime 및 int와 같은 세 개의 열로 구성된 테이블이 있습니다.select 문을 쓰는 방법은?

상태 값이 10이고 동시에 createtime이 가장 많은 모든 레코드 중에서 레코드를 선택하고 싶습니다. 어떤 아이디어가 그런 쿼리를 작성하는 방법?

BTW : ID는 클러스터 된 인덱스이고 또한 createtime 열에 인덱스가 있습니다. 사전에

덕분에, 조지 이것에 대해

답변

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

엄지 손가락의 좋은 규칙은, * (모두) ... 항상 필드를 – balexandre

+0

@balexandre를 지정 사용하지 않을로 : 당신은 ... 나는 잘 알고있어 ... :) –

+2

모든 필드를 하나씩 작성하기에는 너무 게으른 경우 테이블에서 select *를 작성한 다음 텍스트를 표시하고 "디자인 쿼리 편집자"를 클릭 한 후 OK를 클릭하면 Visual Studio에서 선택한 모든 필드의 이름을 나열합니다 성명서 – adopilot

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 
+0

orderby 무엇? 귀하의 진술이 불완전하고 구문이 올바르지 않습니다. –

+0

죄송합니다. html 태그 스타일로 createtime을 (를) 가지고 있는데 답변에 표시되지 않았습니다. – Colin

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 
+0

설명을 제공하지 않은 이유는 무엇입니까? 이것은 정답입니다. –

2

은 내가 특별히, SQL 서버에 익숙하지 해요,하지만 당신은 부속와 함께 할 수 있어야한다 :

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

내가 Arjan의 답변을 좋아하지만 당신은 더 많은 조건을 가지고있는 경우 " 가장 초기에 생성 된 행 "을 선택한 다음 서브 쿼리를 볼 것입니다.

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

이것은 기본적으로 2 개의 쿼리를 실행하며 필요에 따라 불필요하므로 요구 사항이 많을 경우 더 많은 제어가 가능합니다.

HTH

원샷

관련 문제