sql 显示重复记录数

Posted

技术标签:

【中文标题】sql 显示重复记录数【英文标题】:sql show number of duplicate records 【发布时间】: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条记录,但重复的搜索需要在所有表中。

【问题讨论】:

【参考方案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 Xlimit 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)

【讨论】:

以上是关于sql 显示重复记录数的主要内容,如果未能解决你的问题,请参考以下文章

SQL中查找某字段值重复或多个字段值重复的记录数

sql 如何过滤重复记录

用于获取重复记录并在 Gridview 中显示为一行的 SQL 查询

SQL某一表中重复某一字段重复记录查询与处理

sql删除重复记录

在 SQL Server [Moodle] [PHP] 中显示所有但避免重复 DB 列记录