Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

请教一个查重的问题

baiqingrui  发表于:2014-07-28 16:20:21  
复制

有一张表,姓名、性别和出生日期三个字段。现在需要查重,如果姓名、性别相同且两个人出生日期相差3岁以内,则认为是重复的,需要筛出来。这个应该怎么做?

下表中,前三个算重复的。

表1

姓名 性别 出生日期
张一 2013/1/1
张二 2014/6/1
张三 2014/7/8
张四 2014/8/1
李一 2013/9/9
李二 2014/9/10

 

Top
cspa 发表于:2014-07-28 17:07:20
没看明白,你这前三个姓名不同啊,为什么算重复的呢?

baiqingrui 发表于:2014-07-28 17:46:59



baiqingrui 发表于:2014-07-28 18:58:07

上门的表弄错了,不好意思. 改了一下:

表1

姓名 性别 出生日期
张一 2013/1/1
张一 2014/6/1
张一 2014/7/8
张一 2014/8/1
李二 2013/9/9
李二 2014/9/10



renco 发表于:2014-07-29 22:46:44

仅供参考:

SELECT A.*
FROM 表1 AS A
WHERE (Select Count(B.姓名) From 表1 as B Where B.姓名=A.姓名 And B.性别=A.性别  And ABS(datediff('YYYY',A.出生日期,B.出生日期))<=3)>1;

 



baiqingrui 发表于:2014-07-30 20:41:33
谢谢renco,按您的方法问题搞定!

baiqingrui 发表于:2014-07-30 21:32:18

高兴早了, 还是差一点. 我把数据改为下面的

表1

姓名 性别 出生日期
张一 2013/1/1
张一 2014/6/1
张一 2019/7/8
张一 2014/8/1
李二 2013/9/9
李二 2014/9/10

我需要筛出来的是前两个条, 但是第三条也跟着出来了, 如果还有几个"张一"都会筛出来, 那不是我要的结果



baiqingrui 发表于:2014-07-31 12:40:03

受楼上启发,我这样做了。先手工增加了ID字段,数据变为:

表1

id 姓名 性别 出生日期
1 张一 2013/1/1
2 张一 2014/6/1
3 张一 2019/7/8
4 张一 2014/8/1
5 李二 2013/9/9
6 李二 2014/9/10

查询语句如下:

SELECT a.id, a.姓名, a.性别, a.出生日期
FROM 表1 AS a inner join 表1 AS b on a.姓名=b.姓名 and a.性别=b.性别 and abs(datediff("yyyy",a.出生日期,b.出生日期))<=3
where a.id<>b.id
order by a.id;


但是又发现一个新的问题:因为abs(datediff("yyyy",a.出生日期,b.出生日期))<=3语句是小于等于,不是等于,所以ACCESS没有办法在设计视图中创建关系。但我在sql视图中写好语句后,如果用设计视图打开,会有下面的提示


确定后进入设计视图,如果有任何修改,则Access会自动删除“abs(datediff("yyyy",a.出生日期,b.出生日期))<=3”这段。怎样才能保护这个SQL语句,防止误删呢?



renco 发表于:2014-07-31 22:16:27

你的要求咋一看,好象有道理,在推想之后存在一个问题。比如有姓名A,男性,如果存在5个记录,分别是

2001/1/1,2003/1/1,2005/1/1,2007/1/1,2009/1/1

那么这样5条记录留下哪条??2009/1/1 ??,这样2001/1/1是否和你这条隔的时间有些远吧。。但好象也没违反你的要求啊,又好象违反了你的要求。。

呵。。。。这类是如何处理呢?



baiqingrui 发表于:2014-08-01 10:51:48
renco像你说的这种情况,我需要人工判断。只要把你说的4个人都筛出来就行。

baiqingrui 发表于:2014-08-01 10:53:06
本来年龄相差三岁这个条件就不是一个绝对的条件,只是把怀疑重复的记录选出来,再人工看。

renco 发表于:2014-08-01 22:03:01

点击下载此附件


以你出错的数据6楼数据,好象没有出现你的问题啊?!

(请看查询1)



baiqingrui 发表于:2014-08-03 15:55:05
谢谢renco, 可能是我搞错了.你的方法是对的!

总记录:12篇  页次:1/1 9 1 :