【发布时间】:2017-08-13 10:32:43
【问题描述】:
我有一个表格,其结构如下:
User_ID 在特定时间间隔内具有其各自项目的值。项目值可以是文本或整数,具体取决于项目。
我想检查是否有两个或多个 UserId 作为相同的值,这意味着它们的项目具有相同的值和相同的时间间隔。
如上表 UserId 213456 和 UserId 213458 有相同的记录。 我尝试使用游标和循环,但时间太长了。我的表有超过 5000 万个 UserId。有没有办法以有效的方式做到这一点?
我也尝试将 group by 与子查询一起使用,但所有尝试都未能为其创建良好的查询。
我使用How do I find duplicate values in a table in Oracle?创建了以下查询
select t1.USERID, count(t1.USERID)
from USERS_ITEM_VAL t1
where exists ( select *
from USERS_ITEM_VAL t2
where t1.rowid <> t2.rowid and
t2.ITEMID = t1.ITEMID and
t2.TEXT_VALUE = t1.TEXT_VALUE and
--t2.INTEGER_VALUE = t1.INTEGER_VALUE and
t2.INIT_DATE = t1.INIT_DATE and
t2.FINAL_DATE = t1.FINAL_DATE )
group by t1.USERID having count(t1.USERID) > 1 order by count(t1.USERID);
但问题是它在排除 INTEGER_VALUE 列时工作,但当我在连接中包含 INTEGER_VALUE 列时不给我输出,尽管我在 INTEGER_VALUE 列中的数据是相同的。 这是我的表的结构:
USERID - NUMBER
ITEMID - NUMBER
TEXT_VALUE - VARCHAR2(500)
INTEGER_VALUE - NUMBER
INIT_DATE - DATE
FINAL_DATE - DATE
【问题讨论】: