0: jdbc:hive2://node03:10000> create table view_log(..............> name string,..............>time string,..............> views int)..............>row format delimited fieldsterminatedby',';0: jdbc:hive2://node03:10000> load data local inpath '/root/view_log' into table view_log;
# 数据
A,2015-01,5
A,2015-01,15
B,2015-01,5
A,2015-01,8
B,2015-01,25
A,2015-01,5
A,2015-02,4
A,2015-02,6
B,2015-02,10
B,2015-02,5
A,2015-03,16
A,2015-03,22
B,2015-03,23
B,2015-03,10
B,2015-03,11
# 期望结果
用户 月份 最大访问次数 总访问次数 当月访问次数
A 2015-01333333
A 2015-02334310
A 2015-03388138
B 2015-01303030
B 2015-02304515
B 2015-03448944
select
name,time,-- 使用窗口分析函数进行比较,从每个分区第一行开始比较,第一行最大值为自己,下移到第二行,将第二行和第一行作比较,获取较大值,往下同理max(month_views)over(partitionby name orderbytimerowsbetweenunboundedprecedingandcurrentrow) max_views,-- 使用窗口分析函数进行向下累加,从第一行开始,第一行累加得到自己,到第二行,将第一行和第二行相加得到结果,向下同理sum(month_views)over(partitionby name orderbytimerowsbetweenunboundedprecedingandcurrentrow) month_view_add,
month_views
from-- 第一步使用group by按照用户名和日期聚合求出单月的总额作为子表(select name,time,sum(views) month_views from view_log groupby name,time) tb1