如何在不使用sql server2005中的order by子句的情况下以降序获取最后的记录?

时间:2011-11-05 05:03:39

标签: sql-server

我正在使用sql server 2005.I有一个包含超过2万条记录的表。我想按降序显示最后10条记录。我使用此查询来获取记录

select * from course as 
where courseid not in (select top ((select count(*) from course) - 3 ) courseid  
    from course  ) order by courseid desc

但我的dba要求在不使用order by子句的情况下对记录进行排序......这可能吗?我是sql server2005的新手。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

如果没有明确使用ORDER BY可靠地无法获得排序结果。

来源:

The Beatles versus the Stones

Without ORDER BY, there is no default sort order

答案 1 :(得分:1)

要按降序获取最后10条记录,请使用

SELECT TOP 10 *
FROM   course
ORDER  BY courseid DESC  

也许您误解了DBA的投诉?可能因为你当前的查询而抱怨他们

  1. 是否有200,000行的全表扫描才能获得计数
  2. 然后进行另一次扫描以获得前199,997个ids
  3. 并在反半连接中使用它来对抗200,000行的另一次全扫描
  4. 因此意味着您的查询正在处理多于60,000倍的行数。

    Plan