在一列上选择distinct但返回所有列

时间:2013-10-11 21:00:59

标签: hadoop hive hortonworks-data-platform

我的目标是在一列上使用distinct但返回所有列。

我的表就像这样

id, name, year

1, John, 2012

2, Jake, 2012

3, Jenna, 2013

1, John, 2013

我需要在id列上做不同的并返回所有三列以及不同的id,我需要最近的记录。

我需要的输出是

id, name, year

1, John, 2013

2, Jake, 2012

3, Jenna, 2013

我试过这两个命令

  1. 从样本表中选择不同的ID,名称,年份。 我将在所有行上做出明确的分析。

  2. 通过id从sampletable group中选择* 我只返回id列并删除其他列。

2 个答案:

答案 0 :(得分:1)

使用窗口和分析函数,您可以按年份的id排序对数据进行分区,并选择第一个结果:

SELECT id, name, year
FROM 
 (SELECT id, name, year, row_number() over (partition by id order by year desc) as r 
  FROM sampletable) S 
WHERE S.r = 1;

另外还有其他排名功能,例如rankdense_rank用于不同的选择。

答案 1 :(得分:0)

没有分析功能

    select t.id, t.name, t.year from t
    join
      (select id, max(year) year from t group by id) as S 
      on S.id=t.id and S.year = t.year