2009-06-25 3 views
1

Я использую SQL Server 2008. У меня есть таблица, состоящая из трех столбцов, идентификатор как тип строки, createtime как тип DataTime и статус int.как написать инструкцию выбора следующим образом?

Я хочу выбрать запись среди всех записей, значение статуса которых равно 10, и в то же время время жизни является самым ранним. Любые идеи, как написать такой запрос?

BTW: ID - это кластеризованный индекс, и у меня также есть индекс в столбце createtime.

спасибо заранее, Джордж

ответ

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

как хорошее правило, никогда не использовать * (все) ... всегда указать поля – balexandre

+0

@balexandre: Вы правы ... Я знаю ...:) –

+2

Для тех, кто слишком ленив, чтобы писать все поля один за другим, пусть оператор записи выбирает * из таблицы, а затем помечает текст и щелкает правой кнопкой мыши «Запросить дизайн в редакторе», после чего только ОК, 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-тега, не было указано в ответе. – 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 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 запросов и не-необходимая для ваших требований, что дает вам больше контроля, если у вас есть несколько критериев для работы.

НТН

ONESHOT

Смежные вопросы