使用 SQL 删除重复行(Hive / Impala 语法)
Removing Duplicate Row using SQL (Hive / Impala syntax)
我想删除基于 event_dates 和 case_ids 的重复行。
我有一个类似这样的查询(查询要长得多,这只是为了说明问题):
SELECT
event_date,
event_id,
event_owner
FROM eventtable
这给了我如下结果:
event_date event_id event_owner
2018-02-06 00:00:00 123456 UNASSIGNED
2018-02-07 00:00:00 123456 UNASSIGNED
2018-02-07 00:00:00 123456 Mickey Mouse
2018-02-08 00:00:00 123456 Mickey Mouse
2018-02-09 00:00:00 123456 Minnie Mouse
2018-02-10 00:00:00 123456 Minnie Mouse
2018-02-11 00:00:00 123456 Mickey Mouse
.
.
.
问题:
我在 2018-02-07 有重复的条目。我想只留下第二个。
所以结果应该是这样的:
event_date event_id event_owner
2018-02-06 00:00:00 123456 UNASSIGNED
2018-02-07 00:00:00 123456 Mickey Mouse
2018-02-08 00:00:00 123456 Mickey Mouse
2018-02-09 00:00:00 123456 Minnie Mouse
2018-02-10 00:00:00 123456 Minnie Mouse
2018-02-11 00:00:00 123456 Mickey Mouse
.
.
.
我试过使用 SELECT DISTINCT ...
,但这会返回所有结果,因为它考虑了所有 3 列,因此所有行都是唯一的。我只想在 2 列 event_data 和 event_id 上应用 DISTINCT。
我应该使用嵌套子查询吗?或者真相在哪里?非常感谢所有帮助。
你可以使用ROW_NUMBER解析函数来达到这个目的,但是当你说“我想只剩下第二个”时,你应该明确顺序。那个订单在数据中不存在,所以你需要自己做一些事情来生成它。
试试这个查询:
select event_date, event_id, event_owner
from (
select
row_number() over (partition by event_date order by case when event_owner='UNASSIGNED' then 0 else 1 end desc) as rn,
*
from eventtable
) t
where rn=1
我想删除基于 event_dates 和 case_ids 的重复行。
我有一个类似这样的查询(查询要长得多,这只是为了说明问题):
SELECT
event_date,
event_id,
event_owner
FROM eventtable
这给了我如下结果:
event_date event_id event_owner
2018-02-06 00:00:00 123456 UNASSIGNED
2018-02-07 00:00:00 123456 UNASSIGNED
2018-02-07 00:00:00 123456 Mickey Mouse
2018-02-08 00:00:00 123456 Mickey Mouse
2018-02-09 00:00:00 123456 Minnie Mouse
2018-02-10 00:00:00 123456 Minnie Mouse
2018-02-11 00:00:00 123456 Mickey Mouse
.
.
.
问题: 我在 2018-02-07 有重复的条目。我想只留下第二个。 所以结果应该是这样的:
event_date event_id event_owner
2018-02-06 00:00:00 123456 UNASSIGNED
2018-02-07 00:00:00 123456 Mickey Mouse
2018-02-08 00:00:00 123456 Mickey Mouse
2018-02-09 00:00:00 123456 Minnie Mouse
2018-02-10 00:00:00 123456 Minnie Mouse
2018-02-11 00:00:00 123456 Mickey Mouse
.
.
.
我试过使用 SELECT DISTINCT ...
,但这会返回所有结果,因为它考虑了所有 3 列,因此所有行都是唯一的。我只想在 2 列 event_data 和 event_id 上应用 DISTINCT。
我应该使用嵌套子查询吗?或者真相在哪里?非常感谢所有帮助。
你可以使用ROW_NUMBER解析函数来达到这个目的,但是当你说“我想只剩下第二个”时,你应该明确顺序。那个订单在数据中不存在,所以你需要自己做一些事情来生成它。
试试这个查询:
select event_date, event_id, event_owner
from (
select
row_number() over (partition by event_date order by case when event_owner='UNASSIGNED' then 0 else 1 end desc) as rn,
*
from eventtable
) t
where rn=1