Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk mendapatkan purata lajur DATETIME dalam MySQL semasa mengumpulkan mengikut lajur lain

<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粉460377540P粉460377540411 hari yang lalu435

membalas semua(1)saya akan balas

  • P粉347804896

    P粉3478048962023-09-06 10:33:08

    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;

    balas
    0
  • Batalbalas