这是我的第一篇文章,所以我希望我能正确发布这篇文章。
我想计算过去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:
否则计数为0.
我只是不知道如何构建查询。
我试过这个,但它没有用。
count(
IF ENDDATE <= DATES THEN
IF STARTDATE >= DATES THEN 1 ELSE 0 END IF
ELSE
0
END IF
) AS CUST
有什么想法吗?
答案 0 :(得分:0)
您可以编写一个等同于 IF-ELSE 构造的 CASE 表达式。
例如,
SQL> SELECT COUNT(
2 CASE
3 WHEN hiredate <= sysdate
4 THEN 1
5 ELSE 0
6 END ) AS CUST
7 FROM emp;
CUST
----------
14
SQL>
但是,看看您想要的输出,似乎只需要使用 COUNT 和 GROUP BY 。 日期条件应位于过滤谓词。
中例如,
SELECT dates, COUNT(*)
FROM table_name
WHERE dates BETWEEN start_date AND end_date
GROUP BY dates;
答案 1 :(得分:0)
以下产生您正在寻找的结果。我已将日期生成器更改为04-JAN- 2015 而非SYSDATE(当然,在 2016 中),并使用{{1包含'当前'日:
LEVEL-1
祝你好运。