选择按X排序的前N个记录,但是按逆序排序结果

时间:2010-04-03 20:02:07

标签: sql selection

我正在尝试获取前N个记录(当按某些列X排序时),但结果设置的顺序相反。以下语句不正确,但可能会演示我正在追求的内容:

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

例如,列X可以是ID或时间戳;我想要最新的10条记录,但希望它们按照时间顺序返回。

4 个答案:

答案 0 :(得分:10)

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

即。您可能需要在子查询上使用别名,但除此之外它应该有效。

答案 1 :(得分:3)

尝试

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

答案 2 :(得分:1)

ORDER BY子句用于按指定列对RESULT SET进行排序。

您的查询 Select TOP 10 * from FooTable ORDER BY X DESC假设X是时间戳,不会返回最近插入的10行。它将返回数据库中存储的前10行(以任何顺序),然​​后按降序返回10个这样的行的结果集。 因此,您的子查询应修改为

Select TOP 10 * from (Select * from FooTable ORDER BY DESC) as T

这应该符合您的第一个要求。然后,您可以将此结果集用作别名,以确定最终的排序顺序。

我希望我能正确理解你,当你说“我想要获得前N个记录时(按某些X列排序)

答案 3 :(得分:1)

对于 TOP 关键字的所有不受支持的版本,此问题的替代解决方案是使用 LIMIT 。 示例: -

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