我需要找出事件开始的平均时间。开始时间记录在startDate列中的DB中。
| StartDate |
|=====================|
|2015/04/10 3:46:07 AM|
|2015/04/09 3:47:37 AM|
|2015/04/08 3:48:07 AM
|2015/04/07 3:43:44 AM|
|2015/04/06 3:39:08 AM|
|2015/04/03 3:47:50 AM|
所以我需要的是计算事件每天开始的平均时间(hh:MM:ss)。
我不太清楚如何处理这个问题。以下查询不会工作,因为它只是总结并将总值除以总数:
SELECT AVG(DATE_FORMAT(StartDate,'%r')) FROM MyTable
答案 0 :(得分:3)
演示:http://sqlfiddle.com/#!9/33c09/3
说明:
select TIME_FORMAT(avg(cast(startDate as time)),'%h:%i:%s %p') as avg_start_date
from demo
设定:
create table demo (startDate datetime);
insert demo (startDate) values ('2015-04-10 3:46:07');
insert demo (startDate) values ('2015-04-09 3:47:37');
insert demo (startDate) values ('2015-04-08 3:48:07');
insert demo (startDate) values ('2015-04-07 3:43:44');
insert demo (startDate) values ('2015-04-06 3:39:08');
insert demo (startDate) values ('2015-04-03 3:47:50');
说明:
答案 1 :(得分:2)
首先,您必须提取日期时间格式以仅包含时间,以便可以对其使用聚合函数。这是通过将其强制转换为TIME
类型来完成的。然后,您可以使用内置聚合函数AVG()
来实现目标和分组,以获得表格中每天的平均开始日期。
这是由
完成的SELECT AVG(StartDate::TIME) FROM MyTable
要获得每日平均开始时间
SELECT StartDate::DATE, AVG(StartDate::TIME) FROM MyTable GROUP BY StartDate::DATE
如果您还希望在那段时间内没有事件开始的日子,请检查here等效于generate_series,这不是MySQL中的选项。
答案 2 :(得分:0)
将其转换为毫秒应用AVG功能并返回日期
答案 3 :(得分:0)
您可以将时间戳转换为unix时间,计算平均值然后再转回时间戳格式:
>select FROM_UNIXTIME((sum(UNIX_TIMESTAMP(tstamp))/count(*))) from test
April, 07 2015 07:45:25
以下是您的数据示例:timestamp column average