SQL查询中如何剔除重复

例如:selectusername,datefromuser_infowheredate>=to_date('2008-8-100:00:00','yyyy-mm-ddh... 例如:select username, date from user_info
where date>=to_date('2008-8-1 00:00:00', 'yyyy-mm-dd hh24:mi:ss')
and date<=to_date('2008-8-25 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
group by username, date
查询结果中同一username的date有多个,我只想保留一个,应该怎么修改语句?谢谢!
展开
 我来答
兔丞飞
高粉答主

2018-12-17 · 专注娱乐 专注娱乐 专注娱乐
兔丞飞
采纳数:25 获赞数:19893

向TA提问 私信TA
展开全部

1,存在两条完全相同的纪录

这是最简单的一种情况,用关键字distinct就可以去掉

example: select distinct * from table(表名) where (条件)

2,存在部分字段相同的纪录(有主键id即唯一键)

如果是这种情况的话用distinct是过滤不了的,这就要用到主键id的唯一性特点及group by分组

example:

select * from table where id in (select max(id) from table group by [去除重复的字段名列表,....])

3,没有唯一键ID

example:

select identity(int1,1) as id,* into newtable(临时表) from table

select * from newtable where id in (select max(id) from newtable group by [去除重复的字段名列表,....])

drop table newtable

扩展资料

1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断

select * from people

where peopleId in (select  peopleId  from  people  group  by  peopleId  having  count(peopleId) > 1)

2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录

delete from people

where peopleId  in (select  peopleId  from people  group  by  peopleId   having  count(peopleId) > 1)

and rowid not in (select min(rowid) from  people  group by peopleId  having count(peopleId )>1)

3、查找表中多余的重复记录(多个字段)

select * from vitae a

where (a.peopleId,a.seq) in  (select peopleId,seq from vitae group by peopleId,seq  having count(*) > 1)

参考资料:百度百科 结构化查询语言

大野瘦子
高粉答主

2018-12-14 · 繁杂信息太多,你要学会辨别
知道小有建树答主
回答量:1227
采纳率:100%
帮助的人:32.3万
展开全部

1、存在部分字段相同的纪录

如果是这种情况的话用distinct是过滤不了的,这就要用到主键id的唯一性特点及group

代码:select * from table where id in (select max(id) from table group by [去除重复的字段名列表,....])

2、存在两条完全相同的记录

这是最简单的一种情况,用关键字distinct就可以去掉

代码:select distinct * from table(表名) where (条件)

3、没有唯一键ID

这种较为复杂

代码:

select identity(int1,1) as id,* into newtable(临时表) from table(原表)

select * from newtable where id in (select max(id) from newtable group by [去除重复的字段名列表,....])

drop table newtable

扩展资料:

SQL查询语句

1、查询全部的重复信息

select * from people where id not in (

select min(id) from people group by name,sex HAVING COUNT(*) < 2)

2、查询多余的重复信息

select * from people where id not in (

select MIN(id) from people group by name,sex)

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dong_1984dd
2015-08-06 · TA获得超过1.1万个赞
知道小有建树答主
回答量:1070
采纳率:100%
帮助的人:223万
展开全部
  1. 关键字Distinct 去除重复

  2. 如下列SQL,去除Test相同的记录;

  3. select distinct Test from Table

  4. 如果是要删除表中存在的重复记录,那就逻辑处理,如下:

  5. select Test from Table group by Test having count(test)>1

  6. 先查询存在重复的数据,后面根据条件删除

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
agx2004
2008-08-25 · TA获得超过4849个赞
知道小有建树答主
回答量:1708
采纳率:0%
帮助的人:874万
展开全部
如果结果中同一username的date有多个,按照username, date分组,用distinct 是没有效果的。 可以去掉按date分组,如:
select username, max(date) from user_info
where date>=to_date('2008-8-1 00:00:00', 'yyyy-mm-dd hh24:mi:ss')
and date<=to_date('2008-8-25 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
group by username
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
c5net
2008-08-25 · TA获得超过322个赞
知道小有建树答主
回答量:829
采纳率:0%
帮助的人:387万
展开全部
select distinct username, date from user_info
where date>=to_date('2008-8-1 00:00:00', 'yyyy-mm-dd hh24:mi:ss')
and date<=to_date('2008-8-25 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
group by username, date
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式