Sql server 在SQLServer2005中,如何在不使用ORDERBY子句的情况下按降序获取最后的记录?

Sql server 在SQLServer2005中,如何在不使用ORDERBY子句的情况下按降序获取最后的记录?,sql-server,Sql Server,我正在使用sql server 2005。我有一个表,其中包含超过20万条记录。我想按降序显示最后10条记录。我使用这个查询来获取记录 select * from course as where courseid not in (select top ((select count(*) from course) - 3 ) courseid from course ) order by courseid desc 但我的dba要求在不使用ORDERBY子句的情况下对记录进行排序

我正在使用sql server 2005。我有一个表,其中包含超过20万条记录。我想按降序显示最后10条记录。我使用这个查询来获取记录

select * from course as 
where courseid not in (select top ((select count(*) from course) - 3 ) courseid  
    from course  ) order by courseid desc
但我的dba要求在不使用ORDERBY子句的情况下对记录进行排序……这可能吗?我是SQLServer2005的新手。如何做到这一点?

如果不显式使用
排序依据
,就不可能可靠地获得排序结果

资料来源:

如果不明确使用
排序依据
,就不可能可靠地获得排序结果

资料来源:


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

SELECT TOP 10 *
FROM   course
ORDER  BY courseid DESC  
也许您误解了DBA的投诉?他们可能是因为您当前的查询而抱怨

  • 执行200000行的完整表扫描以获取计数
  • 然后进行另一次扫描,以获取最上面的199997 ID
  • 并将其用于反半联接,以对另一个200000行的完整扫描进行比较
  • 因此,这意味着您的查询处理的行数比看起来需要的多60000倍


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

    SELECT TOP 10 *
    FROM   course
    ORDER  BY courseid DESC  
    
    也许您误解了DBA的投诉?他们可能是因为您当前的查询而抱怨

  • 执行200000行的完整表扫描以获取计数
  • 然后进行另一次扫描,以获取最上面的199997 ID
  • 并将其用于反半联接,以对另一个200000行的完整扫描进行比较
  • 因此,这意味着您的查询处理的行数比看起来需要的多60000倍


    你会惊讶于有多少人不记得“lakh”是什么意思。请翻译成英语。请检查[1]。[1] :210万(200000)=>200000(二十万)。为什么您的dba要求您不要使用ORDERBY子句?这就像让某人不用方向盘驾驶一辆车,你会惊讶地发现有多少人不记得“lakh”是什么意思。请翻译成英语。请检查[1]。[1] :210万(200000)=>200000(二十万)。为什么您的dba要求您不要使用ORDERBY子句?这就像让某人不用方向盘驾驶一辆车;修正了“披头士对石头”的链接。这是一个更好/更简单的例子,因为它可以被任何人重复;修正了“披头士对石头”的链接。这是一个更好/更简单的例子,因为它可以被任何人重复。