有一个表.字段分别为  ID(Number) IDCard(Varchar(18)) DateTime(varchar(20)) YYYYMMDD24HHNNSSID是主键不能重复IDCard因为原程序设计上有问题导致已经存在重复列(2~7个不等,甚至更多) DateTime 有可能为Null我现在要把 IDCard 重复的列 DateTime 最后的留下 DateTime 都为 Null留 ID最大的那条我怎么有把我不想要的那些记录用一条SQL语句写出来不是删除.是选出一个记录集.

解决方案 »

  1.   

    select *
       from 
    (
    select  a.*,row_number() over (partition by idcard order by datetime desc null at last,id desc ) 
    from a
    )
    where rn=1
    null at last 可能写的不对,我要查一下
      

  2.   

    应该是NULLS LAST
    select *   from 
    (
    select  a.*,row_number() over (partition by idcard order by datetime desc nulls last,id desc ) 
    from a
    )
    where rn=1
     
     
      

  3.   

    如果你是想要显示不想要的数据
    rn>1就行了
      

  4.   

    呃.刚从SQL转到Oracle .能解释一下 over 和 partition 是什么意思么?麻您烦了.over是分析函数?partition 是分组?最好能用自己的话解释.不要直接用书本上的那种书面语.理解不了...
      

  5.   

    虽然没有测试数据.但是学到了 over 和 partition 同样感谢.
      

  6.   

    rn 是 row_number() as rn 的吧?