Hive:根据最大值对列进行分组

Posted

技术标签:

【中文标题】Hive:根据最大值对列进行分组【英文标题】:Hive : group column based on max value 【发布时间】:2017-04-06 15:41:43 【问题描述】:

我有一个表格,字段为

date       value
10-02-1900 23
09-05-1901 22
10-03-1900 10
10-02-1901 24

....

我必须返回每年的最大值 即,

1900 23
1901 24

我尝试了以下查询,但回答错误。

SELECT YEAR(FROM_UNIXTIME(UNIX_TIMESTAMP(date,'dd-mm-yyyy'))) as date,MAX(value) FROM teb GROUP BY date;

谁能建议我做一个查询?

【问题讨论】:

为什么“日期”不是 ISO 格式/日期类型? 附言。 MM 是几个月,mm 是几分钟 【参考方案1】:

选项 1

select      year(from_unixtime(unix_timestamp(date,'dd-MM-yyyy'))) as year
           ,max(value)                                             as max_value
from        t
group by    year(from_unixtime(unix_timestamp(date,'dd-MM-yyyy')))
;

选项 2

Hive 2.2.0 之前

set hive.groupby.orderby.position.alias=true;

从 Hive 2.2.0 开始

set hive.groupby.position.alias=true;

select      year(from_unixtime(unix_timestamp(date,'dd-MM-yyyy'))) as date
           ,max(value)
from        t
group by    1
;

+------+-----------+
| year | max_value |
+------+-----------+
| 1900 |        23 |
| 1901 |        24 |
+------+-----------+

附言

另一种提取年份的方法:

from_unixtime(unix_timestamp(date,'dd-MM-yyyy'),'yyyy') 

【讨论】:

以上是关于Hive:根据最大值对列进行分组的主要内容,如果未能解决你的问题,请参考以下文章

根据每个值对列的值进行分组[重复]

在sql中使用case语句根据某些条件对列进行分组

hive如何按某一字段分组取最大值所在行的数据

hive如何按某一字段分组取最大值所在行的数据

hive实现用户连续登陆的最大天数

Laravel 选择列,然后按日期对列值进行分组