SQL每7天计算一次用户数

时间:2015-08-07 09:16:56

标签: sql oracle

我是SQL新手,我需要每7天找一次count个用户。从2015年4月到现在,我每天都有一个用户表:

...
2015-05-16 00:00
2015-05-16 00:00
2015-05-17 00:00
2015-05-17 00:00
2015-05-17 00:00
2015-05-17 00:00
2015-05-17 00:00
2015-05-18 00:00
2015-05-18 00:00
...

我需要每7天计算一次用户数(每周),所以我每周都有数据。

SELECT COUNT(user_id), Activity_Date FROM TABLE_NAME

我需要这样的输出:

TotalUsers   week1  week2 week3 ..........and so on
  82              80     14    16

我使用DB Visualizer查询Oracle数据库。

4 个答案:

答案 0 :(得分:1)

你应该尝试以下,

Select 
  sum(Week1) + sum(Week2) + sum(Week3) + sum(Week4) + sum(Week5) as Total,
  sum(Week1) as Week1,
  sum(Week2) as Week2,
  sum(Week3) as Week3,
  sum(Week4) as Week4,
  sum(Week5) as Week5
From (
  select 
    case when week = 1 then 1 else 0 end as Week1,
    case when week = 2 then 1 else 0 end as Week2,
    case when week = 3 then 1 else 0 end as Week3,
    case when week = 4 then 1 else 0 end as Week4,
    case when week = 5 then 1 else 0 end as Week5
  from 
  (
      Select
        CEILING(datepart(dd,visitdate)/7+1) week,
        user_id
      from visitor
  )T
)D

这是Fiddle

你需要添加月份和时间结果也是如此。

答案 1 :(得分:0)

SELECT COUNT(user_id), Activity_Date FROM TABLE_NAME WHERE Activity_Date > '2015-06-31';

这将获得过去7天的用户数量。

答案 2 :(得分:0)

您如何定义周?这是SQL Server的一种方法,它相对于4月初开始每个七天的块。表达式将根据您的具体需求而有所不同:

select
    dateadd(
        dd,
        datediff(dd, cast('20150401' as date), Activity_Date) / 7 * 7,
        cast('20150401' as date)
    ) as WeekStart,
    count(*)
from T
group by datediff(dd, cast('20150401' as date), Activity_Date) / 7

甲骨文:

select
    trunc(Activity_date, 'DAY') as WeekStart,
    count(*)
from T
group by trunc(Activity_date, 'DAY') /* D and DAY are the same thing */

答案 3 :(得分:0)

这是我的测试表:

user_id  act_date
1   01/04/2015
2   01/04/2015
3   04/04/2015
4   05/04/2015
..

这是我的疑问:

select week_offset, count(*) nb from (
select trunc((act_date-to_date('01042015','DDMMYYYY'))/7) as week_offset from test_date)
group by week_offset
order by 1

这是输出:

week_offset  nb
0   6
1   3
4   5
5   7
6   3
7   1
18  1

周抵消是从2015年4月1日起的一周中的数字,我们可以显示一周的第一天。 有关实时测试,请参阅here