SQL 数据排重,去掉重复数据
2005-04-03 09:55
435 查看
最大的错误:
在对数据排重的时候,首先想到的就是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 上下差几条,郁闷了好久:( )
在对数据排重的时候,首先想到的就是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 上下差几条,郁闷了好久:( )
相关文章推荐
- SQL去掉重复数据
- sql去掉重复数据
- 关于sql查询中去掉重复数据的方法
- mysql 用sql 语句去掉某个字段重复值数据的方法
- SQL 去掉两个表中重复的数据
- 一句SQL去掉重复数据
- 黑马程序员 SQL数据分组-限制结果集-去掉重复数据
- SQL 数据排重,去掉重复数据
- SQL两个表连接查询去掉重复数据的方法
- SQL DISTINCT去掉重复的数据统计方法
- sql 去掉(几个条件加起来唯一)重复数据
- SQL---mysql删除重复数据
- SQL删除重复数据只保留一条
- T-SQL技术收集——删除重复数据
- 如何用SQL语句去掉重复记录
- 去除重复数据的SQL语句
- 两库之间重复数据判断SQL
- sqlserver中多行所有数据重复,无法更新或删除问题,通常是在没有主键的情况下的表
- 查询和删除表中重复数据sql语句
- 用sql删除数据库重复的数据的方法