Порядок по предложению меняет мой набор результатов - PullRequest
2 голосов
/ 04 октября 2011

Я знаю, почему это происходит, но я хочу найти способ обойти это, если это возможно.

Например, у меня есть 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

Ответы [ 2 ]

6 голосов
/ 04 октября 2011

Я бы подумал, что одно грубое решение будет:

SELECT *
FROM (SELECT TOP 2 * FROM mytable WHERE someid = @something ORDER BY added DESC)
ORDER BY added
5 голосов
/ 04 октября 2011

Это позволит "топ-2 на что-то" с PARTITION 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

Обратите внимание, что производная таблица требует псевдонима

...