Как написать выбранное утверждение, как это? - PullRequest
1 голос
/ 25 июня 2009

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

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

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

спасибо заранее, George

Ответы [ 7 ]

9 голосов
/ 25 июня 2009
SELECT TOP 1 *
FROM table
WHERE status = 10
ORDER BY created
5 голосов
/ 25 июня 2009
select top 1 ID,
             CreateTime,
             Status
from         SourceTable
where        Status      = 10
order by     CreateTime
3 голосов
/ 25 июня 2009
SELECT  TOP 1 id, createtime, status
FROM    mytable
WHERE   status = 10
ORDER BY
        createtime
2 голосов
/ 25 июня 2009

Я предпочитаю ответ Арджана, но если бы у вас было больше критериев с частью "самая ранняя созданная строка", то я бы посмотрел на подзапросы, например,

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

Хотя это, по сути, выполняет 2 запроса и не требуется для ваших требований, оно дает вам больше контроля, если у вас есть больше критериев для работы.

НТН

ONESHOT

2 голосов
/ 25 июня 2009

Я не знаком с SQL Server, в частности, но вы должны быть в состоянии сделать это с помощью подвыбора:

SELECT *
FROM Table t1
WHERE status = 10 AND createtime = (
    SELECT min(createtime)
    FROM Table t2
    WHERE status = 10
);
0 голосов
/ 25 июня 2009

Как насчет этого?

;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 голосов
/ 25 июня 2009
SELECT
TOP 1 * FROM table WHERE VALUE = 10 
ORDER BY createtime
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...