Выберите вершину N записи, заказанные X, но имейте результаты в обратном порядке

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

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

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

7
задан I. J. Kennedy 3 April 2010 в 20:02
поделиться

3 ответа

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

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

10
ответ дан 6 December 2019 в 14:02
поделиться

Попробуйте

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
3
ответ дан 6 December 2019 в 14:02
поделиться

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

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

Выберите TOP 10 * из (Select * from FooTable ORDER BY DESC) как T

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

Надеюсь, я правильно вас понял, когда вы говорите: « Я пытаюсь получить первые N записей (если они упорядочены по некоторому столбцу X) »

1
ответ дан 6 December 2019 в 14:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: