用这个语句
select row_number() over(order by Times desc) ID,Title,Content,Times,Resours,NewTypeID from News where NewTypeID=1    查询时得到12个结果,ID分别从1到12,而从这个结果中再用下面的语句查询时:
 select title,content from(select row_number() over(order by Times desc) ID,Title,Content,Times,Resours,NewTypeID from News where NewTypeID=1 )where ID=6
从ID从1-6前6个都是对的数据,从7-10都错了,7显示的是8的数据,8显示的是9的数据,依次往后,10显示的11的数据,从11到12就正常了,也就是说查不到ID=7的数据,ID=11的数据重复了两次,ID=10也可以查到ID=11的数据,请问这是何解?

解决方案 »

  1.   

    row_number()是不会重复的,rank()、dense_rank()如果值相同,排名会相同
      

  2.   

    休息一下,先看一下美女http://www.easse.com/a/fitnessphoto/
      

  3.   

    ①ROW_NUMBER: 
    Row_number函数返回一个唯一的值,当碰到相同数据时,排名按照记录集中记录的顺序依次递增。 
    ②DENSE_RANK:
    Dense_rank函数返回一个唯一的值,除非当碰到相同数据时,此时所有相同数据的排名都是一样的。 
    ③RANK:
    Rank函数返回一个唯一的值,除非遇到相同的数据时,此时所有相同数据的排名是一样的,同时会在最后一条相同记录和下一条不同记录的排名之间空出排名。
      

  4.   

    我用row_number()把每行数据排号,然后根据这个号来查询,如果用rank()其他的话,得到的号不是唯一的,也就不能查询,但不知道这样为什么就不行,还有其他的什么方法吗?让每行数据按照时间降序产生一个唯一的编号,再按这个编号来查询。
      

  5.   


    select row_number() over(??? order by Times desc) 
    over what? 
      

  6.   

    select * from (select rownum as ID,Title,Content,Times,Resours,NewTypeID from News where NewTypeID=1 order by Times) where id=6
      

  7.   

    回复7楼:我想按照时间的降序来编号,而不是按照ID的序号来排列(rownum as ID);就是上面的数据,当取ID=7时,出现的结果是ID=8的数据
      

  8.   

    select row_number() over(order by Times desc) ID,Title,Content,Times,Resours,NewTypeID from News where NewTypeID=1把这个查询出来的数据插入临时表试下,你应该给出些真实数据我们帮忙分析