Bagaimana untuk mendapatkan purata lajur DATETIME dalam MySQL semasa mengumpulkan mengikut lajur lain
P粉460377540
P粉460377540 2023-09-05 11:46:21
0
1
515
<p>Saya sedang mencipta dan mengisi jadual MySQL menggunakan pertanyaan berikut: </p> <pre class="brush:php;toolbar:false;">SET zon_masa = '+00:00'; CIPTA JADUAL cap masa_n_datetime ( id INT, masa DATETIME, avg_time DATETIME ); INSERT IN TO timestamp_n_datetime(id,time,avg_time) NILAI("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);</pra> <p>Saya ingin mengisi lajur "avg_time" dengan purata lajur "masa" yang dikumpulkan mengikut id. Sebagai contoh, baris pertama mempunyai 'id' = 1, jadi lajur 'avg_time' harus mengambil purata baris pertama, kedua dan kelima kerana 'id' mereka juga 1. </p> <p>Bagaimanakah saya harus menjawab soalan ini? </p> <p>Edit: Untuk menjelaskan, saya ingin menukar semua lajur DATETIME kepada milisaat, tambah semuanya dan kemudian bahagikan dengan nombor yang ditambahkan. Contohnya, untuk id=2, menukarkannya kepada milisaat, menambahnya dan kemudian membahagikannya dengan 2 (memandangkan terdapat dua baris dengan "id" = 2) memberikan purata untuk 17 Mac 2023 pada 5:45:00 PTG. Saya mahu mendapatkan purata dengan cara ini. </p>
P粉460377540
P粉460377540

membalas semua(1)
P粉347804896

Gunakan ini UNIX_TIMESTAMP 转换为秒,然后使用 FROM_UNIXTIME untuk mengembalikannya ke format datetime, ini adalah cara anda mendapatkan purata:

select id, FROM_UNIXTIME(AVG(UNIX_TIMESTAMP(`time`)))
    from timestamp_n_datetime
    group by id;

Begini cara mengisi purata:

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;
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan