【发布时间】:2016-01-04 12:09:53
【问题描述】:
这是我的第一篇文章,所以我希望我已经正确地发布了这篇文章。
我的问题:
我想统计过去 30 天每天的活跃客户数量。
到目前为止我所拥有的:
在我今天要打印的第一列中,以及过去 29 天。我已经这样做了
select distinct trunc(sysdate-dayincrement, 'DD') AS DATES
from (
select level as dayincrement
from dual
connect by level <= 30
)
我在 stackoverflow 上找到了它,它运行良好。我什至可以延长返回前的天数。 365 天。完美!
我也有一张这样的表
|Cust# | Start date | End date |
| 1000 | 01.01.2015 | 31.12.2015|
| 1001 | 02.01.2015 | 31.12.2016|
| 1002 | 02.01.2015 | 31.03.2015|
| 1003 | 03.01.2015 | 31.08.2015|
这就是我觉得问题开始的地方
我想得到这个结果:
| Dates | # of cust |
|04.01.2015| 4 |
|03.01.2015| 4 |
|02.01.2015| 3 |
|01.01.2015| 1 |
这里的查询将计为 1,如果:
- 开始日期
- 结束日期 >= DATES
否则计数为 0。
我只是不知道如何构造查询。
我试过了,但是没用。
count(
IF ENDDATE <= DATES THEN
IF STARTDATE >= DATES THEN 1 ELSE 0 END IF
ELSE
0
END IF
) AS CUST
有什么想法吗?
【问题讨论】:
-
您可能需要对日期的计数和按日期分组。不是我的电脑,否则我会为你写一个正确的答案。
-
感谢您的帮助! :) 我认为您对 SUM 的看法是正确的,当然对 GROUP BY 也是如此。但是,我收到一条错误消息。 ORA-00923(错位 FROM)。我认为这个来自客户表,它是我从数据库创建的“混合表”。