Я пытаюсь получить вершину N записи (при упорядочивании некоторым столбцом X) но имейте набор результатов в обратном порядке. Следующее утверждение является неправильным, но вероятно демонстрирует то, что я после:
SELECT * FROM (SELECT TOP 10 * FROM FooTable ORDER BY X DESC) ORDER BY X ASC
Например, столбец X мог быть идентификатором или меткой времени; я хочу последние 10 записей, но хочу их, возвратился во вперед хронологическом порядке.
SELECT * FROM
(SELECT TOP 10 * FROM FooTable ORDER BY X DESC) as myAlias
ORDER BY X ASC
т.е. вам может понадобиться псевдоним для вашего подзапроса, но в остальном он должен работать.
Попробуйте
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
Предложение ORDER BY используется для упорядочивания набора результатов по указанному столбцу.
Ваш запрос
Выбрать TOP 10 * из FooTable ORDER BY X DESC
, если X - метка времени, не будет возвращать 10 последних вставленных строк. Он вернет 10 верхних строк в том виде, в каком они хранятся (в любом порядке) в базе данных, а затем вернет набор результатов из 10 таких строк в порядке убывания.
Следовательно, ваш подзапрос должен быть изменен на
Выберите TOP 10 * из (Select * from FooTable ORDER BY DESC) как T
Это должно удовлетворить ваше первое требование. Затем вы можете использовать этот набор результатов как псевдоним, чтобы определить окончательный порядок сортировки.
Надеюсь, я правильно вас понял, когда вы говорите: « Я пытаюсь получить первые N записей (если они упорядочены по некоторому столбцу X) »