我有一个非常大的表(数百万条记录)。有些记录有重复(基于FieldA),唯一的区别是FiedldB中的值。我想创建一个查询,它将删除基于FieldA的所有重复记录,并保留FieldB中值最低的记录。这可能吗?根据字段中的值删除重复的行
0
A
回答
0
似乎相当简单的提取这些值:
select distinct a,
min(b) b
from t
group by a;
小提琴例如:http://sqlfiddle.com/#!9/bc4c9/3
您应该能够从这种适应去除方法。
+0
我跑这个使用极限100,它运行良好。当我跑W/O时,它最大限度地提高了tmp文件。有没有办法像这样运行一个查询来刷新tmp,还是我要手动批量运行,例如ID> 0和ID <100?这将有点吸吮,因为有大约一百万条记录左右。 – user3649739 2015-04-05 13:34:29
+0
你为什么要写一个临时文件?我以为你想删除记录。 – 2015-04-05 13:38:30
0
CREATE TABLE TABLE1
(
FieldA VARCHAR2(30),
FieldB VARCHAR2(30),
FieldC VARCHAR2(30)
);
INSERT INTO TABLE1 VALUES
('DUMMYDATA-A1','DUMMYDATA-B1','DUMMYDATA-C1'
);
INSERT INTO TABLE1 VALUES
('DUMMYDATA-A1','DUMMYDATA-B4','DUMMYDATA-C1'
);
INSERT INTO TABLE1 VALUES
('DUMMYDATA-A1','DUMMYDATA-B3','DUMMYDATA-C1'
);
INSERT INTO TABLE1 VALUES
('DUMMYDATA-A1','DUMMYDATA-B2','DUMMYDATA-C1'
);
COMMIT;
SELECT FieldA,
FieldB,
FieldC,
RANK() OVER(PARTITION BY FieldA ORDER BY FieldB ASC) AS COLUMN_ALIAS
FROM TABLE1; --IDENTIFIES DUPLICATES BASED ON RANK VALUE
---PERFORM DELETE
DELETE
FROM TABLE1
WHERE ROWID IN
(SELECT ROWID
FROM
(SELECT ROWID,
RANK() OVER(PARTITION BY FieldA ORDER BY FieldB ASC) AS COLUMN_ALIAS
FROM TABLE1
)
WHERE COLUMN_ALIAS>1
);
COMMIT;
SELECT * FROM TABLE1; -- CONTAINS A SINGLE RECORD
RANK函数可以识别重复的记录,并且便于删除重复的记录,保留原始行。这已经在这里讨论:Deleting duplicates rows from oracle。希望这可以帮助
但是,由于DELETE本身速度较慢,因此可以在INSERT中执行适当的约束(包含数百万条记录)以避免重复输入。
相关问题
- 1. 根据列中单元格的值删除重复的行
- 2. 删除(使空)重复的字段值
- 3. 根据字段查找删除重复项 - SQL - 根据TIMESTAMP字段删除最旧的项。
- 4. SQL Server 2014:根据行中几个字段之一删除重复的记录
- 5. Elasticsearch根据字段值删除文档
- 6. 根据数值字段中的值添加或删除元素
- 7. 根据两个字段删除重复项
- 8. 如果字段重复,则删除行
- 9. 删除Excel字段中的特定关键字和重复值
- 10. 如何根据postgreSQL中的一列删除重复的行?
- 11. 根据其他列值删除sql中的重复项
- 12. Ruby根据键删除数组中的重复=>值
- 13. 在gridview行中删除重复的值
- 14. 如何根据壳值查找和删除重复行
- 15. 根据列值删除行
- 16. 根据匹配列删除df中的重复行
- 17. 根据模式删除文件中的重复行
- 18. 根据Oracle中的条件删除重复行
- 19. SQL根据多列删除同一个表中的重复行
- 20. 从输入数据中删除RDD中的重复字段
- 21. 根据列的动态数量删除重复的行
- 22. 根据另一列的值删除重复信息
- 23. 根据最高值从元组列表中删除重复项
- 24. 根据回调删除重复
- 25. 根据条件删除重复项
- 26. 如何根据另一个列条件删除重复的行?
- 27. 熊猫 - 根据列删除重复的行
- 28. Excel VBA如何根据C列删除所有重复的行
- 29. 根据另一列中的值从数据集中删除重复项
- 30. 按值删除重复的行
是的,这是可能的。 – wildplasser 2015-04-04 13:29:00