【问题标题】:Finding duplicate values查找重复值
【发布时间】:2019-12-06 16:46:36
【问题描述】:

我有一个名为 Transfers 的表,我想查找在 Doc ID、Amount 和 Date 三列上具有重复值的所有记录。 基本上我需要的是找到Doc id,金额和日期相同的地方 我可以用来查找这些重复项的最佳查询是什么?

我尝试了以下查询

select transfers.doc_id,transfers.date,transfers.amount,
  from transfers 
 where transfers.date between $P{StartDate} and $P{EndDate}
 group by doc_id
having doc_id >1;

这是要寻找的结果:

Doc_id  Date        amount
1234    12/07/2019  3,000
1234    12/07/2019  3,000
2345    12/07/2019  15,000
2345    12/07/2019  15,000
4321    12/07/2019  5,600
4321    12/07/2019  5,600

【问题讨论】:

    标签: mysql sql group-by aggregation


    【解决方案1】:

    使用这个:

    select transfers.doc_id,transfers.date,transfers.amount,count(*) counts
    from transfers
    group by doc_id,date,amount
    having counts>1;
    

    输出将包含重复记录数:

    doc_id  date        amount  counts
    1234    12/07/2019  3,000   2
    2345    12/07/2019  15,000  2
    4321    12/07/2019  5,600   2
    

    【讨论】:

      【解决方案2】:

      考虑将group by 用于三列group by doc_id,Amount,Date

      select t.doc_id,t.date,t.amount
        from transfers t
       where t.date between $P{StartDate} and $P{EndDate}
       group by doc_id,Amount,Date
      having count(doc_id) >1;
      

      【讨论】:

      • 我认为你忘记了在最后一行你应该有一个计数:" ..having count(doc_id) > 1
      • 感谢您的快速回答,这很有帮助,但如果我有多个表可供选择,该怎么办
      • 不客气@user11029146 相同的逻辑有效,所有列都应列在group by 列表中,根据应检查重复的列,
      猜你喜欢
      • 2013-05-30
      • 1970-01-01
      • 2018-06-29
      • 1970-01-01
      • 2017-03-16
      • 2021-11-09
      • 2010-10-15
      • 1970-01-01
      相关资源
      最近更新 更多