我正在尝试获取前N个记录(当按某些列X排序时),但结果设置的顺序相反。以下语句不正确,但可能会演示我正在追求的内容:
SELECT * FROM (SELECT TOP 10 * FROM FooTable ORDER BY X DESC) ORDER BY X ASC
例如,列X可以是ID或时间戳;我想要最新的10条记录,但希望它们按照时间顺序返回。
答案 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