使用sql删除重复行(hive/impala语法)

xuo3flqw  于 2021-06-26  发布在  Impala
关注(0)|答案(1)|浏览(568)

我想删除基于事件日期和案例ID的重复行。
我有一个类似这样的查询(查询要长得多,这只是为了显示问题):

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列,因此所有行都是uniqe。我只想对两列event\ u data和event\ u id应用distinct。我应该使用嵌套子查询吗?或者真相在哪里?非常感谢您的帮助。

lztngnrs

lztngnrs1#

你可以使用行数分析函数来实现这个目的,但是当你说“我只想保留第二个”时,你应该澄清一下顺序。这个顺序在数据中不存在,所以您需要自己做一些事情来生成它。
尝试此查询:

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

相关问题