1

我来自哪里:

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

但我需要一些不同的东西。假设现在是星期一,用户 A 参加上午 9 点到 10 点和下午 2 点到 3 点的活动。这些事件的总和是 2 小时。但我想计算用户参与这些事件的时间。在我的示例中,这是 6 小时(从上午 9 点到下午 3 点)。我在一天内实现了这一点(用户和给定日期的时间差为 max(event) 和 min(event)。

我想去的地方:

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

希望我描述得足够好。

谢谢!

4

1 回答 1

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引用user.

to_date()函数舍入到一天(我们首先分组),该week()函数确定星期(这是我们的第二个分组)。

于 2013-06-17T14:07:02.710 回答