我注意到我的数据库中的表包含重复的行。这发生在各个日期。
当我运行此查询时
select ACC_REF, CIRC_TYP, CIRC_CD, count(*) from table
group by ACC_REF, CIRC_TYP, CIRC_CD
having count(1)>1
我可以看到重复的行以及它的次数(似乎总是2)。
行上有唯一的ID,我认为最好删除最新ID的值
我想选择重复但只有最高ID的数据,以便在删除之前将其移动到另一个表。
任何人都知道如何选择这个?
非常感谢
答案 0 :(得分:1)
它只会输出当前表中的唯一值以及为重复条目指定的条件。
这将允许您从一个单独的select语句中执行“insert into new_table”一步。 无需删除然后插入。
select
id
,acc_ref
,circ_typ
,circ_cd
from(
select
id
,acc_ref
,circ_typ
,circ_cd
,row_number() over ( partition by
acc_ref
,circ_typ
,circ_cd
order by id desc
) as flag_multiple_id
from Table
) a
where a.flag_multiple_id = 1 -- or > 1 if you want to see the duplicates
答案 1 :(得分:0)
试试这个
SELECT t1.* FROM table t1, table t2 WHERE t1.id < t2.id AND t1.ACC_REF = t2.ACC_REF AND t1.CIRC_TYP = t2.CIRC_TYP AND t1.CIRC_CD = t2.CIRC_CD
答案 2 :(得分:0)
select max(id) as maxid, ACC_REF, CIRC_TYP, CIRC_CD, count(*)
from table
group by ACC_REF, CIRC_TYP, CIRC_CD
having count(*)>1
编辑:
我认为这在Sybase中有效,除了id最低的
之外,它会找到所有重复项;with a as
(
select ID, ACC_REF, CIRC_TYP, CIRC_CD,
row_number() over (partition by ACC_REF, CIRC_TYP, CIRC_CD order by id) rn,
from table
)
select ID, ACC_REF, CIRC_TYP, CIRC_CD
from a
where rn > 1
答案 3 :(得分:0)
尝试这样的事情:
SELECT t1.*
FROM YOURTABLE t1
INNER JOIN (
SELECT max(id) ID,
ACC_REF,
CIRC_TYP,
CIRC_CD
FROM YOURTABLE
GROUP BY ACC_REF,
CIRC_TYP,
CIRC_CD
HAVING COUNT(id) > 1
) t2 ON t2.id = t1.id;