删除Hive中的重复记录

时间:2016-07-09 02:51:15

标签: sql join hive distinct

我想创建一个表格,表明由普通会员链接的医疗服务提供者。例如,如果我去提供1和提供2,那么prov 1和prov 2将被链接,因为我访问了它们。

我有一张表,其中每条记录表示一名成员在特定日期访问提供商。该表包含数百万会员和数千名会员。以下是该表的一个小例子:

member    prov    date
  1        1      1/1/15
  1        2      1/2/15
  2        16     1/12/14
  2        5      1/1/16

我正在尝试创建一个表,其中每个记录表示由一个公共成员链接的两个不同的提供者。例如:

member    prov1    prov2    date1    date2
  1         1        2      1/1/15   1/2/15
  2        16        5      1/12/14  1/1/16

我试图在同一个表上使用内连接,但它返回重复记录。我认为distinct子句会解决这个问题,但它似乎没有完成任务。我的查询如下所示:

select distinct a.member, a.prov, b.prov, a.date, b.date
from table1 as a
inner join table1 as b
on a.member=b.member

此查询返回不同的记录,但有些记录包含相同的信息。下面显示了一个例子:

a.member    a.prov    b.prov    a.date    b.date
   1          1         2       1/1/15    1/2/15
   1          2         1       1/2/15    1/1/15

上面我们看到记录是截然不同的,但它们描述了相同的信息。以下是我希望查询返回的内容:

a.member    a.prov    b.prov    a.date    b.date
   1          1         2       1/1/15    1/2/15

如何更改上述查询以便我只返回不同的信息?我不想要每个会员1条记录。我希望会员每个不同的配对分配1条记录。

1 个答案:

答案 0 :(得分:0)

一种选择是使用conditional aggregationrow_number与子查询一起使用:

select member,
       max(case when rn = 1 then prov end) prov1,
       max(case when rn = 2 then prov end) prov2,
       max(case when rn = 1 then date end) date1,
       max(case when rn = 2 then date end) date2
from (select member, 
             prov, 
             date, 
             row_number() over (partition by member order by prov, date) rn 
      from table1) t
group by member
相关问题