【问题标题】:sql show number of duplicate recordssql 显示重复记录数
【发布时间】:2013-06-25 10:18:09
【问题描述】:

我有一个包含字段 recordid(唯一)、createdate、aID、bID、cID 的表

字段aID、bID、cID中存储的值也有3个定义表

我想生成一个显示表中所有字段的结果集,再加上一列显示在过去 10 分钟内创建具有相同 aID、bID 和 cID 的重复记录的次数。

注意:结果集需要包含对aID、bID和cID的定义,例如使用内连接三个定义表

recordid, createdate, aID, aIDdefinition, bID, bIDdefinition, cID, cIDdefinition, [过去 10 分钟内创建的具有相同 aID、bID 和 cID 的附加记录数]

最后,选择查询只需要带前X条记录,但重复的搜索需要在所有表中。

【问题讨论】:

    标签: sql duplicates


    【解决方案1】:

    “最后 10 分钟”是指相对于当前日期/时间,而不是相对于手头的记录。这种方法使用连接和聚合来获得结果:

    select t.aId, t.bId, t.cId, tsum.cnt
    from t join
         (select aId, bId, cId, count(*) as cnt
          from t
          where createTime <= CURREENT_TIMESTAMP
          group by aId, bId, cId
         ) tsum
         on t.aId = tsum.aId and t.bId = tsum.bId and t.cid = tsum.cId;
    

    请注意,当前日期/时间的表达式因数据库而异; CURREENT_TIMESTAMP 是 ANSI 标准方法。您还可以使用getdate()(SQL Server)、now()(MySQL 和 Postgres)、sysdate(Oracle)或其他东西。

    定义将是附加连接,但您甚至没有为此提供表的名称。

    【讨论】:

    • current_timestamp 将是getdate() 的 ANSI 等效项
    • @a_horse_with_no_name 。 . .谢谢你。我确定了答案。
    • 我忘了一件事,选择只需要带上前 X 条记录,但重复搜索需要在所有表中。
    • @user1480192 。 . .然后根据您的数据库,添加top X 或limit X 或类似的东西。这些仅适用于输出,不适用于计算。
    【解决方案2】:

    我相信会是这样的

    SELECT t1.recordid, t1.createdate, t1.aID, t1.bID, t1.cID, isnull(tcount.numberOfRecords10min,0), definitionTable1.aIDdefinition
      FROM t1
        LEFT OUTER JOIN (
          SELECT aID,bID,cID,count(*) as numberOfRecords10min
          FROM t1
          WHERE createdate >= dateadd(minute, -10, GETDATE())
          GROUP BY aID,bID,cID
        ) tcount on (t1.aID = tcount.aID and t1.bID = tcount.bID and t1.cID = tcount.bID)
        LEFT OUTER JOIN definitionTable1 on t1.aID = definitionTable1.aID
    

    假设具有记录列表的表称为t1,具有aID 定义的表是definitionTable1

    代码用于 SQL Server,如果您使用另一个 DBMS,您需要替换 dateadd(minute, -10, GETDATE()) 以获取 10 分钟前的时间戳,并替换 isnull(tcount.numberOfRecords10min,0) 以消除空值(替换为 0)

    【讨论】:

      猜你喜欢
      • 2023-03-26
      • 2020-07-14
      • 2018-12-27
      • 1970-01-01
      • 2020-04-03
      • 1970-01-01
      • 2019-04-27
      • 2021-09-26
      • 1970-01-01
      相关资源
      最近更新 更多