分享

新手请教一个hive语句

wangmy03 发表于 2017-3-26 13:44:30 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 16 11840
本帖最后由 wangmy03 于 2017-3-26 15:39 编辑

2014010114
2014010216
2014010317
2014010410
2014010506
2012010609
2012010732
2012010812
2012010919
2012011023
2001010116
2001010212
2001010310
2001010411
2001010529
2013010619
2013010722
2013010812
2013010929
2013011023
2008010105
2008010216
2008010337
2008010414
2008010516
2007010619
2007010712
2007010812
2007010999
2007011023
2010010114
2010010216
2010010317
2010010410
2010010506
2015010649
2015010722
2015010812
2015010999
2015011023
比如:2010012325表示在2010年01月23日的气温为25度。现在要求使用hive,计算每一年出现过的最大气温的日期+温度。
要计算出每一年的最大气温。我用
select substr(data,1,4),max(substr(data,9,2)) from table2 group by substr(data,1,4);
出来的是  年份  +  温度  这两列数据例如 2015     99

但是如果我是想select 的是:具体每一年最大气温的那一天  + 温度 。例如  20150109     99
请问该怎么执行hive语句。。group by 只需要substr(data,1,4),但是select  substr(data,1,8),又不在group by 的范围内。  是我陷入了思维死角。一直想不出所以然。。求大神指点一下。在select 如果所需要的。不在group by的条件里。这种情况如何去分析?



已有(16)人评论

跳转到指定楼层
zhongqi2513 发表于 2017-3-26 17:21:09
先拆再算。。 不一定非得追求一步到位
回复

使用道具 举报

arsenduan 发表于 2017-3-26 18:07:36
group by不用改。改substr(data,1,8)试试
select substr(data,1,8),max(substr(data,9,2)) from table2 group by substr(data,1,4);


回复

使用道具 举报

wangmy03 发表于 2017-3-26 18:53:22
arsenduan 发表于 2017-3-26 18:07
group by不用改。改substr(data,1,8)试试
select substr(data,1,8),max(substr(data,9,2)) from table2 gr ...

不可以.就是当select 的条件不在group by条件里不能执行。除非select是聚合函数。

但是有时候就是要查询的条件不在group by里,但同时又需要group by去归类的情况,我就是不知道是否有什么我不知道的办法处理这种情况。

如果不是用一步到位胡方法,我是能做出来。就是想不拆分成新表去做这样操作。
回复

使用道具 举报

wangmy03 发表于 2017-3-26 18:57:56
zhongqi2513 发表于 2017-3-26 17:21
先拆再算。。 不一定非得追求一步到位

主要就是要一步到位。可以一步到位统计出某年最高温度的年份。为什么无法一步到位查到最高温度对应的具体某天呢?group by条件这种限制死sellect条件的情况是否有我不知道的简单的处理方法一步处理到位。
回复

使用道具 举报

langke93 发表于 2017-3-26 19:30:09
wangmy03 发表于 2017-3-26 18:53
不可以.就是当select 的条件不在group by条件里不能执行。除非select是聚合函数。

但是有时候就是要查 ...

执行这个试试
select substr(data,1,8),max(substr(data,9,2)) from table2 group by substr(data,1,8);


回复

使用道具 举报

wangmy03 发表于 2017-3-26 19:38:39
langke93 发表于 2017-3-26 19:30
执行这个试试
select substr(data,1,8),max(substr(data,9,2)) from table2 group by substr(data,1,8); ...

不对,这个group by (data,1,8)就变成按前八位进行聚合。就不是按年份求max,得出的是全部日期的最大值。这个操作只针对某一日有多个温度的情况最大值。而不是一年里最大值。
回复

使用道具 举报

easthome001 发表于 2017-3-26 21:22:38
wangmy03 发表于 2017-3-26 19:38
不对,这个group by (data,1,8)就变成按前八位进行聚合。就不是按年份求max,得出的是全部日期的最大值。 ...

select substr(data,1,4),substr(data,5,8),max(substr(data,9,2)) from table2 group by substr(data,1,4);


回复

使用道具 举报

wangmy03 发表于 2017-3-26 23:52:38
easthome001 发表于 2017-3-26 21:22
select substr(data,1,4),substr(data,5,8),max(substr(data,9,2)) from table2 group by substr(data,1, ...

不行,substr(data,5,8)没在group by里。执行都执行不过的。
回复

使用道具 举报

nextuser 发表于 2017-3-27 07:44:41
wangmy03 发表于 2017-3-26 23:52
不行,substr(data,5,8)没在group by里。执行都执行不过的。

select substr(data,1,4),substr(data,5,4),max(substr(data,9,2)) from table2 group by substr(data,1,4);


回复

使用道具 举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条