如何在Hive中为每个disticnt id选择最新记录?

时间:2018-01-17 11:24:30

标签: hive

我有一个类似下表的Hive表

ID | Value | Timestamp (epoch)| Status
 1   2300      1516187739     | Active
 1   2500      1516187403     | Stopped
 1   1800      1516187450     | Stopped
 2   1300      1516187730     | Active
 2   1500      1516187780     | Active

。我希望通过查看状态为活动时每个ID的时间戳来获取最新记录。我希望每个ID只有一条记录。所以结果如下表所示。我正在寻找一种在Hive中实现此查询的有效方法。

ID | Value | 
 1   2300      
 2   1500      

1 个答案:

答案 0 :(得分:2)

您可以将row_number()分析函数用于此目的。

 SELECT a.id, a.VALUE
  FROM (SELECT id,
               VALUE,
               ROW_NUMBER () OVER (PARTITION BY id ORDER BY timestamp DESC)
                  rn
          FROM yourtable) a
 WHERE rn = 1;