使用 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