.最大的錯誤:
在對數據排重的時候,首先想到的就是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
desc
)
as
rn
from
學員表 ) K
where
rn<2;
3.根據一個字段排重
select * from 表
where 字段 in (select 字段 from 表 group by 字段 having count(字段) > 1)
where 字段 in (select 字段 from 表 group by 字段 having count(字段) > 1)
4.sql1="select 標題,參考價格,內容,生產廠商,配件類型,適用機型,配件性能 from Contentpj GROUP BY 標題,參考價格,內容,生產廠商,配件類型,適用機型,配件性能"