Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MySQL中计算日期的平均值?_Sql_Mysql - Fatal编程技术网

如何在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

如何在MySQL中计算日期之间的平均值? 我对时间值、小时和分钟更感兴趣

桌子上有:

| 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
;