我是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数据库。
答案 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。