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 的是:具体每一年最大气温的那一天 + 温度 。例如 20150109 99
请问该怎么执行hive语句。。
group by 只需要substr(data,1,4),
但是select substr(data,1,8),又不在group by 的范围内。
是我陷入了思维死角。一直想不出所以然。。求大神指点一下。
在select 如果所需要的。不在group by的条件里。这种情况如何去分析?
第一步:获取每一年的最高气温:
select substring(line, 1, 4) as year, max(substring(line, -2)) as max_temp
from exercise3 group by substring(line, 1, 4);
接下来要求显示最高温度的日期:
提供两种方案:
1、使用TopN 的技巧可以解决
2、再次使用一次连接SQL既可以解决
这里使用join连接的方式解决:
select substring(b.line, 1, 8) as max_temp_date, a.max_temp
from exercise3 b join (
select substring(c.line, 1, 4) as year, max(substring(c.line, -2)) as max_temp
from exercise3 c group by substring(c.line, 1, 4)
) a
on a.year = substring(b.line, 1, 4) and
a.max_temp = substring(b.line, -2);