mysql/oracle 以唯一时间为分界,小于等于该时间求和,大于该时间求和

【背景】 项目需要把上百个乡镇的用户数进行分组统计,本次分类以每个乡镇大批量用户割接时间为分界线,统计上线前和上线后的用户发展情况,如下图,就需要统计 小于等4月18日的数据和之后日期的所有数据,以前没遇到过类似的问题,在这里做个记录。

【思路】本来想在网上抄作业,但是看到的基本上都是类似于按照时间区间统计的需求,说下自己的思路,因为项目里不同乡镇的割接时间是不一致的,所以首先要确定分界线,也就是找到不同乡镇最大割接的日期,这里我先创建了一张表用来做分界线使用

create table test_szxc_1 as 
SELECT T.areaname,T.ctime,PV FROM test_SZXC T,
(SELECT T.areaname,MAX(PV) pp FROM test_SZXC T 
 group by T.areaname )a
where  a.areaname = t.areaname
and  a.pp = t.PV

随后,以其中一个乡镇为例,找到它小于等于割接时间的数据,然后分组求和,这里就是我要统计的底量数据


-- 底量部分
select t.areaname,sum(t.pv) from test_SZXC t,(select * from test_szxc_1 where areaname like '%关坝%')a
where 
t.areaname = a.areaname
and 
t.ctime <= a.ctime
group by areaname

同理,大于该时间的就是增量数据了,这里我就直接全表处理了,

-- 增量部分
select t.areaname,sum(t.pv) from test_SZXC t,(select * from test_szxc_1 )a
where 
t.areaname = a.areaname
and 
t.ctime > a.ctime
group by areaname

最后发现此法可行,就把两部分数据放在一起处理了,加了一个列作为区分使用



-- 数据合并

select '底量' as category ,t.areaname,sum(t.pv) from test_SZXC t,(select * from test_szxc_1)a
where 
t.areaname = a.areaname
and 
t.ctime <= a.ctime
group by areaname
 union all
select '增量' as category,t.areaname,sum(t.pv) from test_SZXC t,(select * from test_szxc_1 )a
where 
t.areaname = a.areaname
and 
t.ctime > a.ctime
group by areaname

最后导出即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值