我有一个名单的时间表的条目显示的开始和结束时间。这是坐在一个MySQL数据库。我需要创造条形图基于这种数据有的每天24小时沿底和量的人工作时间为每小时的一天。

例如,如果爱丽丝做的工作,从15:30时至19:30和鲍勃的工作从12:15至17:00,图表看起来是这样的:

Example Chart

我有一个WTFey解决方案,现在,涉及到电子表格出去列DY或者类似的东西。所需要的分辨率为15分钟的时间间隔。

我假定这是最好的做法的数据库,然后出口图表的创造。让我知道如果我错过任何详细信息。谢谢。

有帮助吗?

解决方案

创建一个表,只有时间在这上从午夜到午夜包含的每一分钟。在数据仓库的世界,我们会叫这个时间维度。这里有一个例子:

TIME_DIM
 -id
 -time_of_day
 -interval_15 
 -interval_30

一个例子数据表将

id   time_of_day    interval_15    interval_30
1    00:00          00:00          00:00
...
30   00:23          00:15          00:00
...
100  05:44          05:30          05:30

然后你所要做的就是加入你们的表的时间尺度以及随后组通过interval_15.例如:

SELECT b.interval_15, count(*) 
FROM my_data_table a
INNER JOIN time_dim b ON a.time_field = b.time
WHERE a.date_field = now()
GROUP BY b.interval_15

其他提示

我想出了一个伪代码解决方案,希望这有所帮助。

create an array named timetable with 24 entries
initialise timetable to zero

for each user in SQLtable
  firsthour = user.firsthour
  lasthour = user.lasthour

  firstminutes = 4 - (rounded down integer(user.firstminutes/15))
  lastminutes = rounded down integer(user.lastminutes/15)

  timetable(firsthour) = timetable(firsthour) + firstminutes
  timetable(lasthour) = timetable(lasthour) + lastminutes

  for index=firsthour+1 to lasthour-1
    timetable(index) = timetable(index) + 4
  next index

next user

现在的时间表阵列拥有的价值,你的愿望,在15分钟粒度,即。一个值的4=1小时,5=1小时15分钟,14=3小时30分钟。

这里是另一个伪代码解决方案,从不同的角度;一位更加密集,因为它并96查询每24小时期间:

results = []
for time in range(0, 24, .25):
  amount = mysql("select count(*) from User_Activity_Table where time >= start_time and time <= end_time")
  results.append(amount)

这个怎么样:

使用"时代"表,但有两栏,含有15分钟的时间间隔。该from_times是15分钟时间,to_times是前一秒钟,下一from_times.例如12:30:00至12:44:59.

现在让你的人工作表,我已经被称为"活动"这里,字和结束时间列。

我加值爱丽丝和鲍勃按原来的问题。

这里的查询,从MySQL:

SELECT HOUR(times.from_time) AS 'TIME', count(*) / 4 AS 'HOURS'
FROM times
  JOIN activity
  ON times.from_time >= activity.start_time AND 
     times.to_time   <= activity.end_time
GROUP BY HOUR(times.from_time)
ORDER BY HOUR(times.from_time)

它给我这样的:

TIME   HOURS
12     0.7500
13     1.0000
14     1.0000
15     1.5000
16     2.0000
17     1.0000
18     1.0000
19     0.7500

看起来有关的权利...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top