我正在使用以下查询创建并填充 MySQL 表:
SET time_zone = '+00:00';
CREATE TABLE timestamp_n_datetime (
id INT,
time DATETIME,
avg_time DATETIME
);
INSERT INTO timestamp_n_datetime(id,time,avg_time)
VALUES("1","2023-01-03 10:12:13", NULL),
("1", "2023-02-04 11:13:14", NULL),
("2", "2023-03-02 09:14:10", NULL),
("2", "2023-04-02 05:15:50", NULL),
("1", "2023-06-10 02:04:10", NULL);
我想用按 id 分组的“时间”列的平均值填充“avg_time”列。例如,第一行的 'id' = 1,因此 'avg_time' 列应取第一、第二和第五行的平均值,因为它们的 'id' 也是 1。
我该如何回答这个问题?
编辑:为了澄清,我希望将所有 DATETIME 列转换为毫秒,将它们全部相加,然后除以相加的数字。例如,对于 id=2,将它们转换为毫秒,将它们相加然后除以 2(因为有两行“id”= 2)给出 2023 年 3 月 17 日下午 5:45:00 的平均值。我想通过这种方式得到平均值。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
使用此
UNIX_TIMESTAMP转换为秒,然后使用FROM_UNIXTIME将其恢复为日期时间格式,这就是获取平均值的方法:select id, FROM_UNIXTIME(AVG(UNIX_TIMESTAMP(`time`))) from timestamp_n_datetime group by id;这是填充平均值的方法:
update timestamp_n_datetime td inner join ( select id, FROM_UNIXTIME(AVG(UNIX_TIMESTAMP(`time`))) as average from timestamp_n_datetime group by id ) as s on s.id = td.id set avg_time = s.average;