计算每周存在的总和

时间:2013-06-17 13:54:22

标签: mysql group-by

我来自哪里:

我有表'event',user和user_event。表事件存储事件开始和结束的日期时间。 User_event保存用户正在参加的事件的信息。现在,只需将所有事件持续时间相加,就可以轻松计算某个用户在事件中安排的时间总和。

但我需要不同的东西。假设它是星期一,用户A正在参加9-10am和2-3pm的活动。这些事件的总和是2小时。但我想说明用户的存在需要多长时间才能参与这些事件。在我的例子中,这是6小时(从早上9点到下午3点)。我实现了这一天(用户和特定日期的最大(事件)和分钟(事件)的时差。

我想去的地方:

但我无法找到一个解决方案来总结整个星期的存在。我需要将每天的所有存在总和加起来。但我不能使用一天给出的解决方案,因为min()和max()只会给我整周的唯一最小值和最大值,而不是每周的每一天。

希望我描述得很好。

谢谢!

1 个答案:

答案 0 :(得分:0)

首先是GROUP BY天,然后是一周:

select 
    sum(d.dayFinish - d.dayStart) as weeklyPresence, 
    week(d.day) as weekNumber
    d.userId
from (
    select 
         to_date(e.startDate) as day, 
         min(e.startDate) as dayStart
         max(e.finishDate) as dayFinish,
         e.userId
    from events e
    group by to_date(e.startDate), e.userId
) d
group by week(d.day), d.userId

(我没有遵循实际的语法,可能需要某些类型的转换。)

我认为您有一个Events表,其中包含startDateendDate列,以及一个引用userId的{​​{1}}外键。

user函数舍入到当天(我们对第一个进行分组),to_date()函数确定一周(这是我们的第二个分组)。