sql server 数据去重思路
- opensesame举例,比如表1是员工表,有5000员工的基础资料表2是数据,字段有牌号,刷卡次数,
每个员工可以对应上万条牌号记录,所以表3是关联表
字段是员工号喝牌号ID
员工两两对比,要找出所有员工关联的牌号里,刷卡次数完全相同的记录
假设员工A,关联牌号有10001,10002,10003,分别刷卡30,50,60
员工B,关联牌号10001,10002,10005,分别刷卡40,50,60
现在就想筛选出这个员工A和B,关联的10002有相同的刷卡次数,
主要是员工太多,每个员工估计平均关联的牌号在1w以上,怎么快速找出结果呢 - 他二叔能把字段给出来么?直接sql语句写出来给你
- opensesame字段太多,我也不确定凌达最终需要哪些数据所以本想来求个思路,自己写的效率太低,用本办法一个个去对比的,如果有直接可用sql最好了
至少用到这些,USER.uid(员工号,唯一),PRO.pcode(牌号,唯一),PRO.pnum(次数),USER2PRO.uid(员工号,和前面的一样),USER2PRO.pcode(牌号,和前面的一样)
需要得到的数据写入一张新表
uid,pcode,pnum,重复率 四个字段 - 他二叔两个步骤,不一定成熟啊
第一步,先把对应员工的卡号,总次数列出来
第二步,把各个牌号的次数列出来。
然后按照刷卡次数排列,导出结果,用excel简单处理一下就行 - 老兵-猫族最简单粗暴就把 员工标识和次数组成关键字。
然后:SELECT * FROM 组合表 WHERE IN (SELECT DISTINCT 新字段 FROM 组合表 GROUP BY 新字段 HAVING COUN(新字段)>1) ORDER BY 新字段
可能有点出入,大思路这样比较简单直接好理解
另:做组合表用左联接(left join) - opensesame我就是类似这样的方式,查询有点慢
- 老兵-猫族
- znm几万还好吧,group一下,
- opensesame谢谢,我再试试