【问题标题】:Group by Week beginning Sunday从周日开始按周分组
【发布时间】:2013-06-06 00:36:11
【问题描述】:

我有一个包含 eventdatetime 、 userid 等的表。数据每天都会插入到表中。

对于报告,我需要计算 userid , projectid 按周分组:Tue-Mon 一次一个月范围。

我需要有关按月按周对数据进行分组的帮助。我正在使用 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  

按 ?? 分组

我希望输出按周分组,例如: 周开始 2013-04-14

2013-04-21

【问题讨论】:

  • 按月计算,这是否意味着第一周应该是新的一周而不是一天?还是周日总是 7 天一周的第一天?
  • 您的示例 SQL 没有意义,因为您在 count() 函数中使用了未在 from / join s 中分配的表别名

标签: sql oracle


【解决方案1】:

http://www.techonthenet.com/oracle/functions/to_char.php 使用To_Char 函数和IW 来获取星期。然后你可以GROUP BY那个IW值。

请注意,Oracle 周的开始日期取决于数据库的语言设置。一些国家在周日和一些周一开始。您必须查看您的设置才能看到。如果它已经在周日开始,那么你很幸运!

【讨论】:

    【解决方案2】:

    如果您发布的示例是您正在进行的工作版本 - 在担心获取星期几之前,您应该先了解一下查询的基础知识

    您正在选择 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 而不是介于两者之间的时间

    分组的基本规则是,要选择一个列,您需要按它进行分组或使用聚合函数,例如 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
    

    虽然这不是最好的方法,但如果您发布问题中涉及的架构会更容易

    【讨论】:

      猜你喜欢
      • 2021-08-03
      • 1970-01-01
      • 2017-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-02
      • 1970-01-01
      相关资源
      最近更新 更多