如何计算过去7,15,30天前(来自sysdate)Oracle SQL的用户数

时间:2017-02-01 16:55:55

标签: sql oracle

所以,我正在尝试计算登录7,15的用户,& 30天前来自sysdate。我知道我可以算上7天前玩过的用户,我可以对它们进行分组,但我想算一下7,15和10的用户。 30天前

select roel, count(column_name)
FROM  USER , STRUCTURE
where login_time > sysdate - 7
group by role

我想得到以下结果:

Role    7days ago    15 days ago    30 days ago    Never 
Admin   1            20             0              150

1 个答案:

答案 0 :(得分:2)

如果要计算用户数,基本思路是条件聚合。假设login_timesysdate都在user表中,您可以这样做:

select role,
       sum(case when login_time > sysdate - 7 then 1 else 0 end) as count_07,
       sum(case when login_time > sysdate - 15 then 1 else 0 end) as count_15,
       sum(case when login_time > sysdate - 30 then 1 else 0 end) as count_30
from user u
group by role;

为什么你在userstructure之间做笛卡尔积不清楚。实际上,您所拥有的数据可能需要加入。

此外,为此目的使用sysdate是不常见的,因为sysdate有一个时间组件。通常,您只想查看日期。