采用自连接和窗口函数两种方法解题:
求每个用户截止到每月为止的当月访问次数、最大单月访问次数、累计到该月的总访问次数。
三个字段的意思:
用户名,月份,访问次数
表名visits
字段id, vmonth, pv
数据:
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
最后结果展示:
结果数据 result-data (本月和上月比保留最大) (本月累加上月)
用户 月份 当月访问次数 最大访问次数 总访问次数
A 2015-01 33 33 33
A 2015-02 10 33 43
A 2015-03 38 38 81
B 2015-01 30 30 30
B 2015-02 15 30 45
B 2015-03 44 44 89
方法1,自连接
-
先求出当月访问次数
select id,vmonth,sum(pv) as pv from visits group by id,vmonth;
结果:
id vmonth pv A 2015-01 33 A 2015-02 10 A 2015-03 38 B 2015-01 30 B 2015-02 15 B 2015-03 44
-
根据上述语句用CTAS创建两张表t1和t2,用于自连接。