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 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)
【讨论】:
以上是关于sql 显示重复记录数的主要内容,如果未能解决你的问题,请参考以下文章