根据最大列值创建新列

时间:2019-02-19 16:51:14

标签: sql hiveql

我有一个看起来像这样的查询

select max(mytime), type, id from my table where id = 1
group by id, type

这给我的结果类似于

time              type               id
2018-01-01        green              1
2017-01-03        blue               1
2017-03-03        red                1

我希望基于最大值将类型设置为相同。因此,在这种情况下,将花费所有相似ID的最长时间,然后为所有条目复制该类型。看起来应该像

time              type               id
2018-01-01        green              1
2017-01-03        green              1
2017-03-03        green              1

2 个答案:

答案 0 :(得分:0)

Hive支持first_value()窗口功能,因此您可以执行以下操作:

select distinct max(mytime) over (partition by id, type) as mytime,
       first_value(type) over (order by max(mytime) desc) as type,
       id
from my table 
where id = 1
group by id, type;

但是,这似乎真的很奇怪。您为什么要摆脱原始类型?

答案 1 :(得分:0)

您可以使用子查询尝试以下方式

  select t1.time,(select type from mytable where mytime= (select max(mytime) from mytable
    where id = 1) ) as type,id
     (
     select max(mytime) as time , type, id from mytable
     where id = 1
     group by id, type
      ) t1