我来自哪里:
我有表'event',user和user_event。表事件存储事件开始和结束的日期时间。 User_event保存用户正在参加的事件的信息。现在,只需将所有事件持续时间相加,就可以轻松计算某个用户在事件中安排的时间总和。
但我需要不同的东西。假设它是星期一,用户A正在参加9-10am和2-3pm的活动。这些事件的总和是2小时。但我想说明用户的存在需要多长时间才能参与这些事件。在我的例子中,这是6小时(从早上9点到下午3点)。我实现了这一天(用户和特定日期的最大(事件)和分钟(事件)的时差。
我想去的地方:
但我无法找到一个解决方案来总结整个星期的存在。我需要将每天的所有存在总和加起来。但我不能使用一天给出的解决方案,因为min()和max()只会给我整周的唯一最小值和最大值,而不是每周的每一天。
希望我描述得很好。
谢谢!
答案 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
表,其中包含startDate
和endDate
列,以及一个引用userId
的{{1}}外键。
user
函数舍入到当天(我们对第一个进行分组),to_date()
函数确定一周(这是我们的第二个分组)。