Oracle 21c中基于Connect By的高效连续周客户统计方案需求
高效实现Oracle按客户周度连续区间累计统计的需求
需求详情
需保留全部21行数据,按每个客户每周计算统计结果,核心逻辑如下:
- 客户1在第4周首次得到1:因前3周(1-3)均有出现,满足连续3周各至少一次的条件;前3周分别因回溯周数不足或出现次数不够,结果为0。
- 客户1在第6周得到3:因回溯所有连续3周的区间(1-3、2-4、3-5)均满足连续无间隔出现的条件,累计为3。
- 客户1在第8周得到0:因回溯最近3周(5-7)中第7周无出现,不满足连续3周条件。
weeknum列由to_number(to_char(data,'ww'))生成,所有客户统一按此逻辑计算。
当前问题与诉求
- 已通过递归子查询因式分解完成解决方案,但当需要回溯9、10周时性能极差。
- 希望获得更高效的实现方案,例如使用
connect by子句的写法。 - 使用Oracle 21c环境,已准备好对应的DDL、DML及现有方案的测试数据。
内容的提问来源于stack exchange,提问作者Florin
相关产品推荐
相关产品推荐

