#sql #sql-server #sql-order-by
#sql #sql-сервер #sql-order-by
Вопрос:
Я знаю, почему это происходит, но я хочу найти способ обойти это, если это возможно.
Например, у меня есть 4 строки в моей базе данных, и у каждой есть дата-время (которые все разные). Что я хочу сделать, так это получить последние 2 строки, но использовать порядок возрастания, чтобы самый старый находился в верхней части результирующего набора.
В настоящее время я использую
SELECT TOP 2 *
FROM mytable
WHERE someid = @something
ORDER BY added DESC
Это дает мне правильные строки, но в неправильном порядке. Если я изменю DESC на ASC, он получит правильный порядок, но более старые две из четырех строк. Все это имеет смысл для меня, но есть ли способ обойти это?
РЕДАКТИРОВАТЬ: решается с помощью ответа Эллиота ниже. Однако синтаксис не будет работать без установки псевдонима для производной таблицы. Вот результат
SELECT * FROM
(SELECT TOP 2 * FROM mytable WHERE someid = @something ORDER BY added DESC) AS tbl
ORDER BY tbl.added ASC
Ответ №1:
Я бы подумал, что одним из решений с использованием грубой силы будет:
SELECT *
FROM (SELECT TOP 2 * FROM mytable WHERE someid = @something ORDER BY added DESC)
ORDER BY added
Комментарии:
1. Я получаю синтаксическую ошибку в конце предложения ORDER BY Неправильный синтаксис рядом с ключевым словом ‘ORDER’. Нужно ли мне предложение WHERE для использования order by?
2. Неважно, исправил это. Я добавил «КАК tbl» в конец заключенного в квадратные скобки отчета select, а затем УПОРЯДОЧИТЬ ПО tbl.добавлено
Ответ №2:
Это позволит использовать «top 2 для чего-то» с добавлением РАЗДЕЛА BY к предложению OVER
SELECT *
FROM
(
SELECT *, ROW_NUMBER() OVER (ORDER BY added DESC) as rn
FROM mytable
WHERE someid = @something
) foo
WHERE rn <= 2
ORDER BY added
Обратите внимание, что для производной таблицы требуется псевдоним
Комментарии:
1. Каковы преимущества этого метода по сравнению с приведенным выше методом Эллиота Нельсона?
2. @James Hay: честно говоря, ничего, кроме расширяемого для запросов типа «top n на группу» или более сложной сортировки.
3. Ну, это работает достаточно хорошо, поэтому поддерживает вас. Но я думаю, что для краткости я пойду с приведенным выше.