sql server 数据去重思路

  • o
    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语句写出来给你
  • o
    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)
  • o
    opensesame
    我就是类似这样的方式,查询有点慢
  • 老兵-猫族
    回复6#opensesame

    用组合出的新表能快点,不过按说如果几万条这个数量级的话,应该不会很慢
  • z
    znm
    几万还好吧,group一下,
  • o
    opensesame
    谢谢,我再试试