oracle查询根据条件删除重复行
Posted
技术标签:
【中文标题】oracle查询根据条件删除重复行【英文标题】:oracle query to remove duplicate rows based on condition 【发布时间】:2015-08-09 08:51:42 【问题描述】:我有下表所示的数据。
+------+----------+----------+
| type | date1 | date2 |
+------+----------+----------+
| IT1 | 05/01/15 | 08/01/15 |
| IT1 | 05/01/15 | |
| IT1 | 04/01/15 | |
| IT1 | | 03/02/15 |
| IT1 | 06/01/15 | 03/02/15 |
| IT1 | | 04/02/15 |
| IT2 | 05/01/15 | |
| IT2 | 05/01/15 | 04/01/15 |
| IT2 | 03/01/15 | |
| IT2 | | 09/01/15 |
+------+----------+----------+
我需要通过删除重复来获取行,结果如下
+------+----------+----------+
| type | date1 | date2 |
+------+----------+----------+
| IT1 | 05/01/15 | 08/01/15 |
| IT1 | 04/01/15 | |
| IT1 | 06/01/15 | 03/02/15 |
| IT1 | | 04/02/15 |
| IT2 | 05/01/15 | 04/01/15 |
| IT2 | 03/01/15 | |
| IT2 | | 09/01/15 |
+------+----------+----------+
对于特定类型,
-
如果 date1 存在对应的 date2,则选择该行并删除其他 date1
如果对应的 date2 不存在,则保留它
同样,
-
如果 date2 存在对应的 date1,则选择该行并删除其他 date2
如果对应的 date1 不存在,则保留它
是否可以为此编写一个 oracle 查询? 谁能帮我做这件事?
【问题讨论】:
【参考方案1】:试试这个查询:
select *
from table1 t1
WHERE
"date2" IS NOT NULL
AND
"date1" IS NOT NULL
OR
"date2" IS NULL
AND NOT EXISTS (
SELECT 1 FROM table1 t2
WHERE t1."type" = t2."type"
AND t1."date1" = t2."date1"
AND t2."date2" IS NOT NULL
)
OR
"date1" IS NULL
AND NOT EXISTS(
SELECT 1 FROM table1 t2
WHERE t1."type" = t2."type"
AND t1."date2" = t2."date2"
AND t2."date1" IS NOT NULL
)
演示:http://sqlfiddle.com/#!4/12b8b/8
【讨论】:
以上是关于oracle查询根据条件删除重复行的主要内容,如果未能解决你的问题,请参考以下文章