oracle 中累加函数,Oracle 分析函数分组累加!

用户号码 登陆时间

13000000002010-01-01

13000000012010-01-01

13000000022010-01-02

13000000012010-01-02

13000000032010-01-03

13000000022010-01-03

13000000042010-01-04

13000000032010-01-04

13000000042010-01-02

13000000062011-01-04

13000000012011-01-04

剔除重复登陆的用户,只计算统计时间内用户的第一次登陆记录。然后每天累加用户数。

select b.statusdate,

sum(times) over(partition by trunc(b.statusdate, 'mm') order by b.statusdate)

from (select a.statusdate, count(1) times

from (select phone, trunc(min(statusdate), 'dd') statusdate

from test_table t

where t.statusdate >= to_date('20100101', 'yyyymmdd') --统计开始时间

and t.statusdate < to_date('20100201', 'yyyymmdd')

group by phone) a --取用户第一条记录时间

group by a.statusdate) b

由统计开始和结束时间控制数据源。trunc(b.statusdate, 'mm') 控制累加的范围,如果是月则表示按月累计,也就是每月的第一次重新统计。

由于受到trunc(b.statusdate, 'mm') 只能按年,月,日累加所以如果数据源跨年则不能一累加。如果需要一直累加则:

select b.statusdate,

sum(times) over(partition by b.part order by b.part,b.statusdate)

from (select a.part,a.statusdate, count(1) times

from (select 1 part,phone, trunc(min(statusdate), 'dd') statusdate

from test_table t

where t.statusdate >= to_date('20100101', 'yyyymmdd') --统计开始时间

and t.statusdate < to_date('20110201', 'yyyymmdd')

group by phone) a --取用户第一条记录时间

group by a.statusdate,a.part) b

增加一个临时字段表示累加范围,例如:1表示数据统计第一次进行累加数据统计,然后按这一次的所有数据进行去重和累叫。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值