【发布时间】:2016-03-14 14:33:37
【问题描述】:
我需要数周累计客户数量。有什么好的方法可以在不进行子查询的情况下做到这一点?
我想寻找一些分析函数,但没有发现任何有价值的东西。所有可行的解决方案都使用子查询或总和,这对我的任务来说是错误的。
例如,对于这些表
WITH the_data as (
select sysdate - 28 dt, 1 val from dual union all
select sysdate - 27 dt, 13 val from dual union all
select sysdate - 20 dt, 15 val from dual union all
select sysdate - 19 dt, 1 cusval from dual union all
select sysdate - 18 dt, 2 from dual union all
select sysdate - 17 dt, 3 from dual union all
select sysdate - 16 dt, 4 from dual union all
select sysdate - 15 dt, 5 from dual union all
select sysdate - 14 dt, 6 from dual union all
select sysdate - 8 dt, 7 from dual union all
select sysdate - 6 dt, 8 from dual union all
select sysdate - 3 dt, 9 from dual union all
select sysdate - 2 dt, 9 from dual union all
select sysdate - 1 dt, 10 from dual)
我想获得关注
+----------------------------------+
| WEEK_NUM CUM_DISTINCT_COUNT |
+----------------------------------+
| 8 2 |
| 9 6 |
| 10 8 |
| 11 11 |
| 12 12 |
+----------------------------------+
【问题讨论】:
-
您应该发布您的表结构、示例数据、您尝试过的内容以及期望的结果;没有这些信息,就很难回答。 Here你可以阅读如何提出一个好问题
-
没有任何数据将很难为您提供帮助,但解决方案可能类似于
COUNT(DISTINCT CUST_NUMBER) OVER (PARTITION BY WEEK)