求删资料 sql我有一个订单文件  
主键是 ordid 和 version现有资料﹕Ordid   version
Aa       0
Aa       1
Bb       0
Bb       1
Cc       0
Cc       1
Cc       2我现在只要版本最大的﹐删掉之前的版本最后剩﹕
Ordid   version
Aa       1
Bb       1
Cc       2不過要注意 還有訂單子檔也要刪

解决方案 »

  1.   

    select Ordid,max(version)
    from tablename
    group by Ordid
      

  2.   

    delete from tablename
    where rowid not in(
    select rowid from(
    select Ordid,max(version)
    from tablename
    group by Ordid))
      

  3.   

    delete from table_name t1 where exists (select 1 from table_name t2 where
    t1.Ordid=t2.Ordid and t1.version<t2.version)
      

  4.   

    sbaz(万神渡劫)
    select Ordid,max(version)
    from tablename
    group by Ordid
    会有 rowid??
      

  5.   

    sbaz(万神渡劫)若設有 distinct ,group by 將無法自表中取rowid
      

  6.   

    Try this one:
    delete from tablename
    where Ordid||version not in(
    select Ordid||max(version) from tablename
    group by Ordid)
      

  7.   

    由於樓主的表中主键是ordid 和version,要保留同ordid中的version值最大的行,可以使用我如下方法:
    DELETE FROM "訂單表"
    where (ordid,version) IN (
    select ordid,version from (
    select ordid,version,row_number() over (partition by ordid order by version DESC) as row_Num from "訂單表") where row_Num<> 1
    );
    以上語句即可達到樓主要求,但一定要保証主键是ordid 和version,即同ordid值的行中,不能再有相同的version值的行,否則不會保留到唯一行,而且還可能出現錯誤,樓主可以測試一下。
      

  8.   

    實際上,如果樓主的表中的主键是ordid 和version的話,還可以直接使用如下更簡單的語句:
    delete from "訂單表" where (ordid,version) NOT IN (select ordid,max(version) from "訂單表" group by ordid);