Выберите Top N записей, упорядоченных по X, но результаты в обратном порядке - PullRequest
7 голосов
/ 04 апреля 2010

Я пытаюсь получить верхние N записей (если они упорядочены по некоторому столбцу X), но результат установлен в обратном порядке. Следующее утверждение неверно , но, вероятно, демонстрирует, что я ищу:

SELECT * FROM (SELECT TOP 10 * FROM FooTable ORDER BY X DESC) ORDER BY X ASC

Например, столбец X может быть идентификатором или отметкой времени; Я хочу, чтобы последние 10 записей были возвращены в хронологическом порядке.

Ответы [ 4 ]

10 голосов
/ 04 апреля 2010
SELECT * FROM 
   (SELECT TOP 10 * FROM FooTable ORDER BY X DESC) as myAlias 
ORDER BY X ASC 

т.е. вам может понадобиться псевдоним в вашем подзапросе, но в остальном он должен работать.

3 голосов
/ 04 апреля 2010

Попробуйте

SELECT * FROM 
(SELECT TOP 10 * FROM FooTable ORDER BY X DESC) temp  --alias
ORDER BY X

или с общим табличным выражением (CTE)

WITH Temp AS (SELECT TOP 10 * FROM FooTable ORDER BY X DESC) 

SELECT * FROM temp 
ORDER BY X
1 голос
/ 18 сентября 2017

Альтернативное решение этого вопроса для всех не поддерживаемых версий для ключевого слова TOP заключается в использовании LIMIT . Пример: -

SELECT * FROM 
   (SELECT * FROM FooTable ORDER BY X DESC LIMIT 10) as myAlias 
ORDER BY X ASC 
1 голос
/ 04 апреля 2010

Предложение ORDER BY используется для упорядочения RESULT SET по указанному столбцу.

Ваш запрос Select TOP 10 * from FooTable ORDER BY X DESC, предполагая, что X является меткой времени, не будет возвращать последние вставленные 10 строк.Он вернет первые 10 строк, сохраненные (в любом порядке) в базе данных, а затем вернет результирующий набор из 10 таких строк в порядке убывания.Следовательно, ваш подзапрос должен быть изменен на

Select TOP 10 * from (Select * from FooTable ORDER BY DESC) as T

Это должно соответствовать вашему первому требованию.Затем вы можете использовать этот набор результатов в качестве псевдонима для определения вашего окончательного порядка сортировки.

Я надеюсь, что правильно вас понял, когда вы говорите: " Я пытаюсь получить первые N записей (когда заказано какой-то колонкой X)"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...