如何获得MySQL中DATETIME列的平均值,同时按其他列分组

pftdvrlh  于 2023-01-04  发布在  Mysql
关注(0)|答案(1)|浏览(166)

我正在创建一个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分组的“time”列的平均值填充“avg_time "列。例如,第一行的”id“= 1,因此”avg_time“列应取第一行、第二行和第五行的平均值,因为它们的”id“也是1。
我该如何处理这个问题呢?
编辑:为了澄清,我希望所有的DATETIME列都转换为毫秒,将它们相加,然后除以相加的数字。例如,对于id=2,将它们转换为毫秒,将它们相加,然后除以2(因为有两行'id' = 2),得到2023年3月17日下午5:45:00的平均值。

deikduxw

deikduxw1#

使用This 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;

相关问题