Order by子句正在改变我的结果集

时间:2011-10-04 00:46:52

标签: sql sql-server sql-order-by

我知道为什么会这样,但如果可能的话,我想找到解决办法。

例如,我的数据库中有4行,每个行都有一个日期时间(都是不同的)。我想要做的是获取最新的2行,但使用升序,以便最旧的位于结果集的顶部。

我目前正在使用

SELECT TOP 2 *
FROM mytable
WHERE someid = @something
ORDER BY added DESC

这会得到正确的行,但顺序错误。如果我将DESC更改为ASC,它会获得正确的顺序,但是四行中较旧的两行。这一切对我来说都有意义,但它有办法吗?

编辑:解决了以下Elliot的回答。但是,如果不为派生表设置别名,语法将无法工作。结果如下

SELECT * FROM 
(SELECT TOP 2 * FROM mytable WHERE someid = @something ORDER BY added DESC) AS tbl
ORDER BY tbl.added ASC

2 个答案:

答案 0 :(得分:6)

我认为一个强力解决方案是:

SELECT *
FROM (SELECT TOP 2 * FROM mytable WHERE someid = @something ORDER BY added DESC)
ORDER BY added

答案 1 :(得分:5)

这将允许将“PARTITION BY”添加到OVER子句

中的“每件事2件”
SELECT *
FROM
  (
  SELECT *, ROW_NUMBER() OVER (ORDER BY added DESC) as rn
  FROM mytable
  WHERE someid = @something
  ) foo
WHERE rn <= 2
ORDER BY added

请注意,派生表需要别名