分享

新手请教一个hive语句

wangmy03 发表于 2017-3-26 13:44:30 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 16 11856
wangmy03 发表于 2017-3-27 12:02:33
nextuser 发表于 2017-3-27 07:44
select substr(data,1,4),substr(data,5,4),max(substr(data,9,2)) from table2 group by substr(data,1, ...

呃。。。一眼就看出跟你回复的一眼的报错。。substr(data,5,4)不在group by 范围里
回复

使用道具 举报

nextuser 发表于 2017-3-27 12:15:23
wangmy03 发表于 2017-3-27 12:02
呃。。。一眼就看出跟你回复的一眼的报错。。substr(data,5,4)不在group by 范围里

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


回复

使用道具 举报

wangmy03 发表于 2017-3-27 12:26:16
nextuser 发表于 2017-3-27 12:15
select substr(data,1,4),substr(data,5,4),max(substr(data,9,2)) from table2 group by substr(data,1, ...

group by substr(data,1,4), substr(data,5,4) 相当于 7楼回复的错误所在。。因为这个条件实际就是group by substr(data,1,8)  的聚合条件。
回复

使用道具 举报

desehawk 发表于 2017-3-27 12:47:36
wangmy03 发表于 2017-3-27 12:26
group by substr(data,1,4), substr(data,5,4) 相当于 7楼回复的错误所在。。因为这个条件实际就是group  ...

select data,max(substr(data,9,2)) from table2 group by substr(data,1,4);
上面多出温度数据,应该能看到结果。

回复

使用道具 举报

sunsiyuan521 发表于 2017-5-15 19:28:20
select concat(A.y,B.d),B.mt
from
(select substr(tempdata,1,4) y,max(substr(tempdata,9,2)) mt from temp
group by substr(tempdata,1,4)) A
join
(select substr(tempdata,1,4) y,substr(tempdata,5,4) d,max(substr(tempdata,9,2)) mt from temp
group by substr(tempdata,1,4),substr(tempdata,5,4)) B
on A.y=B.y and A.mt=B.mt;

20010105        29
20070109        99
20080103        37
20100103        17
20120107        32
20130109        29
20140103        17
20150109        99
回复

使用道具 举报

sunsiyuan521 发表于 2017-5-16 11:08:03
select B.d,B.mt
from
(select substr(tempdata,1,4) y,max(substr(tempdata,9,2)) mt from temp
group by substr(tempdata,1,4)) A
join
(select substr(tempdata,1,4) y,substr(tempdata,1,8) d,max(substr(tempdata,9,2)) mt from temp
group by substr(tempdata,1,4),substr(tempdata,1,8)) B
on A.y=B.y and A.mt=B.mt;
不用concat也可以
回复

使用道具 举报

heierya 发表于 2017-7-13 16:49:36
[mw_shl_code=sql,true]
SELECT substr(DATA,1,4) ,
       substr(DATA,5,2) ,
       substr(DATA,7,2) ,
       substr(DATA,9,2) ,
       row_number() over(partition BY substr(DATA,1,4)
                         ORDER BY substr(DATA,9,2) DESC) rank
FROM exam;[/mw_shl_code]

取rank=1 就可以了
回复

使用道具 举报

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

本版积分规则

关闭

推荐上一条 /2 下一条