[英]Group by Week beginning Sunday
我有一个带有eventdatetime,userid等的表。每天将数据插入到表中。
对于报告,我需要按周:Tue-Mon分组,一次提供一个月范围内的userid,projectid计数。
我需要每周按月对数据进行分组的帮助。 我正在使用Oracle。
select count(distinct( table1.projectid))as Projects, count(distinct( table2.userid)) as Users,??
from table1
join table 2
on table1.a= table2.a
where table1.e='1'
and table1.eventdatetime between sysdate-30 and sysdate-1
通过...分组 ??
我希望将输出按周进行分组,如:WeekBegin 2013-04-14
http://www.techonthenet.com/oracle/functions/to_char.php在IW
使用To_Char
函数来获取星期。 然后,您可以GROUP BY
该IW
值。
请注意,Oracle周开始的日期取决于数据库的语言设置。 一些国家/地区在周日和某些星期一开始。 您必须查看您的设置才能看到。 如果已经在周日开始,那么您很幸运!
如果您发布的示例是正在进行的版本-在担心获取星期几之前,应先了解正确的查询基础
您正在选择e.projectid和u.userid,但查询中没有任何名为e或u的表-您似乎想为它们别名为e和u?
您的查询的where子句还在寻找不存在的表e
在那种情况下,你应该改变
from table1
join table2
on table1.a= table2.a
至
from table1 e -- select from table1 using alias e
join table2 u -- join table2 using alias u
on ( e.a = u.a ) -- joining on column a from table1 (e) = a from table2 (u)
一旦您用要加入的列名称替换了on部分中的a后,就可以在删除最后一列“,??”后运行 从选择-也许沿着这些路线
select
count (e.projectid) PROJECTS,
count (u.userid) USERS
from table1 e
join table2 u
on ( e.a = u.a )
where e.FILTERING_COLUMN = '1'
and e.eventdatetime >= sysdate-30
请注意,由于sysdate是服务器上的当前时间(取决于本地化和会话设置),因此可以使用大于sysdate-30的值,而不是使用sysdate-30的值,如果表适合索引,则可以使查询优化器的时间更短
分组的基本规则是要选择一个列,您需要按该列进行分组或使用诸如COUNT()之类的聚合函数
所以你可能想要像
select
count (e.projectid) PROJECTS,
count (u.userid) USERS,
to_char(e.eventdatetime,'MM') MONTH
from table1 e
join table2 u
on ( e.a = u.a )
where e.FILTERING_COLUMN = '1'
and e.eventdatetime >= sysdate-30
group by e.eventdatetime
尽管这不是实现此目的的最佳方法,但是如果发布了涉及该问题的模式,则会更容易
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.