我的意图是:
按时间 大-->小 排序得到结果集(如果时间相同就按照ID 大-->小 排序)。取出最后20条记录
下面两个方法是测试是正确的。
我想问问这两个写法是否完全一样?第二方法在子查询中加了ArticleId DESC,会有不同吗?? 我担心我的测试用例不够好,问问大家。
SELECT * FROM (SELECT TOP 20 * FROM Article ORDER BY AddTime ASC) T  ORDER BY AddTime DESC,ArticleId DESC SELECT * FROM (SELECT TOP 20 * FROM Article ORDER BY AddTime ASC,ArticleId DESC) T  ORDER BY AddTime DESC,ArticleId DESC

解决方案 »

  1.   

    如何从表中用SELECT语句提取最后10条数据呢?
    declare @num as int
    select @num = count(*) from authors
    set @num = @num - 20declare @sql as varchar(200)
    set @sql = 'select * from authors where au_id not in (select top ' + cast(@num as char) + ' au_id from authors)'
    exec (@sql)
      

  2.   

    如何从表中用SELECT语句提取最后20条数据呢?
    declare @num as int
    select @num = count(*) from authors
    set @num = @num - 20declare @sql as varchar(200)
    set @sql = 'select * from authors where au_id not in (select top ' + cast(@num as char) + ' au_id from authors)'
    exec (@sql)
      

  3.   

    chuifengde(树上的鸟儿) 
    不一样--------------------
    说一下啊,具体点,那里会错??
      

  4.   

    直接select top 20 * from tab order by datatime asc, id desc不结了?
      

  5.   

    select * from (select top 20 * from article ORDER BY AddTime,articleid) t  ORDER BY AddTime DESC,ArticleId DESC里面默认应该是asc的  你加desc万一20左右出现重复的会取id大的 和你的初衷不一样了
    如果不加那列系统会找最左边的列开始排序  所以必须要加不过应该是asc的排序方法
      

  6.   

    declare @i smallint
    set @i=select count(*)-20 from Tselect * from T where id not in (select top @i id from T)
      

  7.   

    最后20条就是反过来前20条,可以用id的in查询