查询不重复记录

由于设计需要,需要查询不重复的记录值,同类问题,想必大家都遇到过,于是乎马上GOOGLE一下,发现此类问题还挺多,解决方案也不少,仔细看看。
例如有如下表结构和值
table
fid  name  sex
1  a  男
2  b  男
3  c  女
4  d  女
5  a  男
6  b  男
方案一:distinct
select distinct name from table
得到结果:
name
a
b
c
d
实现效果,那如果要同时打开其它记录呢?再试试
select distinct name,id from table
测试没什么效果,查下得知,这样实际是要name和id字段都重复才被筛选。继续查找可得如下方法:
方案二:group by
select *, count(distinct name) from table group by name
Oracle下测试失败,据说MYSQL下通过,不管,继续思考....
翻翻书,试试
select min(fid),name,sex from table group by name
成功,现实如下结果:
fid  name  sex
1  a  男
2  b  男
3  c  女
4  d  女
继续思考,如果要打开所有记录,不指定字段用(*),貌似这方法就不行了!
select  * from table where fid in(Select min(fid) FROM table group by name)-----用这个-
测试成功
fid  name  sex
1  a  男
2  b  男
3  c  女
4  d  女
方案三:
本来已经完了,突然想起前几天在网上查了查询数据中所有某字段不重复的记录
select  *  from  table  where  name in(select  name  from  table  group  by  name  having  count(name)=2)
得到如下结果:
fid  name  sex
1  a  男
2  b  男
5  a  男
6  b  男
以此类推:
select  *  from  table  where  name in(select  name  from  table  group  by  name  having  count(name)=1)
按道理说没问题,大家试试~~
再多的字段都全部现实。哎,原来如此简单!回顾网上方法distinct,Inner  Join等等,麻烦,而且有很大局限性.
总结如下:
select distinct name from table打开不重复记录的单个字段
select  * from table where fid in(Select min(fid) FROM table group by name)打开不重复记录的所有字段值
select  *  from  table  where  name in(select  name  from  table  group  by  name  having  count(name)=1)打开不重复任意次数的所有记录


我自己写的
select count(distinct x733specificprob) from reporter_status where asb_nmsemsname = '贝尔1240' order by x733specificprob asc

select x733specificprob,node,alertkey,ASB_NmsEmsName,AlertGroup from reporter_status
where Serial in
(select min(Serial) from reporter_status where asb_nmsemsname like '贝尔1240' group by x733specificprob)
order by x733specificprob asc
注:条件中min中的列要唯一,最好是主键

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值