SQL 數據排重,去掉重復數據 有用


.最大的錯誤:
    在對數據排重的時候,首先想到的就是Distinct,雖然這很管用,但多數場合下不適用,因為通常排重后還要做進一步處理,比如對編號排重后要按日期統計等。

    無法排重的Group by ... having ...
    雖然可以用Group by userid having count(*) =1 或者>1 ,但只能找出重復或者不重復的記錄,好像達不到distinct 的效果(我是沒做到,啊笨)。

    這個可以:
    用select * from table t where not exists (select 1 from table where userid=t.userid and submit_time > submit_time) (submit_time為記錄入庫時間,或者可以用其他的只要是數據庫中不重復的字段就成),同時還達到了一個效果,第一次入庫的userid才被計算在內,這在許多情況下還是比較有用的(比如處理誤操作什么的)。

    值得注意:
     另外在用上面的方法排重的時候,如果外面的select * .... where ...  后還有其他條件,則這些條件也要寫入 select 1 from .... where .... 中,即內、外條件要相同(我就是沒注意到這點,發現結果比Distinct 上下差幾條,郁悶了好久:( )

 

 

 

2.還可以這樣:
 
select  from
(select ID,Name,Email ROW_NUMBER() over (partition by Email order by ID descas rn  from 學員表 ) K
where  rn<2;
 
 
3.根據一個字段排重
select * from 表 
where 字段 in (select 字段 from 表 group by 字段 having count(字段) > 1) 
4.sql1="select 標題,參考價格,內容,生產廠商,配件類型,適用機型,配件性能 from Contentpj GROUP BY 標題,參考價格,內容,生產廠商,配件類型,適用機型,配件性能"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM