如何在MySQL中计算日期的平均值?
如何在MySQL中计算日期之间的平均值? 我对时间值、小时和分钟更感兴趣 桌子上有:如何在MySQL中计算日期的平均值?,sql,mysql,Sql,Mysql,如何在MySQL中计算日期之间的平均值? 我对时间值、小时和分钟更感兴趣 桌子上有: | date_one | datetime | | date_two | datetime | 执行如下查询: SELECT AVG(date_one-date_two) FROM some_table WHERE some-restriction-applies; 编辑: AVG(date1-date2)有效,但我不知道它返回的是什么数据。大胆地想,你可以在设定时间的几分钟内做一次datedi
| date_one | datetime |
| date_two | datetime |
执行如下查询:
SELECT AVG(date_one-date_two) FROM some_table WHERE some-restriction-applies;
编辑:
AVG(date1-date2)
有效,但我不知道它返回的是什么数据。大胆地想,你可以在设定时间的几分钟内做一次datediff,将其平均,然后将这些分钟加回到设定时间…这似乎有点老套,但适用于1970年到2030年之间的日期(在32位arch上)。实际上,您将日期时间值转换为整数,求平均值,然后将平均值转换回日期时间值
SELECT
from_unixtime(
avg(
unix_timestamp(date_one)-unix_timestamp(date_two)
)
)
FROM
some_table
WHERE
some-restriction-applies
可能有更好的解决方案,但这会让您在紧要关头度过难关。AVG是一个分组函数,这意味着它将对表中的所有行求和,然后除以行数。但是,听起来您需要两个不同列的平均值,每行分别报告。在这种情况下,您应该自己计算:(date1+date2)/2。(MySQL可能需要一些额外的语法来正确添加这些列。) 您编写的代码将为您提供表中date1和date2之间经过的平均时间
SELECT date_one + (date_two - date_one) / 2 AS average_date
FROM thetable
WHERE whatever
你不能对日期求和,但你可以减去它们,得到一个时间间隔,你可以将它减半,然后加回第一个日期
select avg(datediff(date1,date2))
select avg(timediff(datetime,datetime))
结果是
“2011-02-12 11:00:00”
CREATE TABLE `some_table`
(
`some_table_key` INT(11) NOT NULL AUTO_INCREMENT,
`group_name` VARCHAR(128) NOT NULL,
`start` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
`finish` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`some_table_key`)
);
SELECT
group_name,
COUNT(*) AS entries,
SEC_TO_TIME( AVG( TIME_TO_SEC( TIMEDIFF(finish, start) ) ) ) AS average_time
FROM some_table
GROUP BY
some_table.group_name
;
在使用组函数时,您应该始终指定所需的组,如果您稍后使用JOIN等扩展查询,并假设MySql将为您选择正确的组,则可能会导致组函数出现一些混乱。“秒到秒时间(平均时间(时间到秒)(时间差(完成,开始)))作为平均时间”
CREATE TABLE `some_table`
(
`some_table_key` INT(11) NOT NULL AUTO_INCREMENT,
`group_name` VARCHAR(128) NOT NULL,
`start` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
`finish` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`some_table_key`)
);
SELECT
group_name,
COUNT(*) AS entries,
SEC_TO_TIME( AVG( TIME_TO_SEC( TIMEDIFF(finish, start) ) ) ) AS average_time
FROM some_table
GROUP BY
some_table.group_name
;