Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Rata-rata data untuk setiap 5 menit dalam waktu yang ditentukan

Kelompokkan ke interval

Anda harus menggunakan group by untuk membuat satu grup untuk setiap interval yang ingin Anda rata-ratakan.

select avg(Column), convert((min(datetime) div 500)*500 + 230, datetime) as time
from Databasename.tablename 
where datetime BETWEEN '2012-09-08 00:00:00' AND '2012-09-08 15:30:00'
group by datetime div 500

Ini memanfaatkan fakta bahwa tanggal dan waktu secara implisit dapat dikonversi ke angka, yang kemudian akan menjadi format YYMMDDhhmmss . Membagi angka tersebut dengan 100 menghapus detik, dan juga membagi dengan 500 menghasilkan angka unik untuk setiap interval 5 menit.

Kolom tambahan yang saya pilih akan memberikan pertengahan interval:kapan saja dari interval (di sini memilih minimum, tetapi itu tidak terlalu penting), berubah menjadi nomor interval 5 menit itu, kembali menjadi tanggal dan waktu nomor, dan kemudian menambahkan dua setengah menit. Anda dapat menggunakan sintaks serupa untuk menghitung awal (cukup tinggalkan + 230 keluar) atau (termasuk) akhir (+ 459 ) dari interval.

Diuji menggunakan sqlfiddle .

Penanganan akhir jangkauan

Perhatikan bahwa BETWEEN rentang akan menyertakan baris dari 15:30:00 tetapi tidak ada orang lain dari interval yang dimulai pada saat itu. Mungkin Anda ingin mengecualikan akhir rentang dari pilihan Anda:

where datetime >= '2012-09-08 00:00:00' AND datetime < '2012-09-08 15:30:00'

Mengapa Anda mendapatkan NULL

Mengapa kueri Anda menghasilkan NULL :Untuk melakukan aritmatika interval, Anda tidak menyertakan seluruh interval dalam tanda kutip, dan Anda menggunakan nama tunggal untuk satuan waktu. Yaitu

'2012-09-08 15:30:00' + INTERVAL 5 minute

Tapi ini hanya akan memperluas jangkauan ke 2012-09-08 15:35:00 dan masih belum membuat interval 5 menit yang Anda inginkan. Cara Anda menulisnya, Anda mencoba menambahkan dua string, yang tidak mungkin dilakukan di MySQL kecuali jika string tersebut dapat diubah menjadi angka, dalam hal ini angka-angka tersebut akan ditambahkan.

Anda mungkin ingin menggunakan aritmatika interval untuk menghitung akhir eksklusif interval, yaitu detik pertama setelah intervalnya:

 convert((min(datetime) div 500)*500, datetime) + INTERVAL 5 minute as endOfInterval

Cukup tambahkan 500 bukannya 230 kueri saya tidak akan berfungsi karena angka yang dihasilkan mungkin menunjukkan tanggal yang tidak valid untuk interval terakhir setiap jam.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bidang peningkatan database mysql menggunakan sintaks record aktif codeigniter

  2. Memasukkan dari MS SQL Server ke database MySQL

  3. utf-8 vs latin1

  4. Kode Migrasi Spesifik Basis Data

  5. cara memasukkan kode HTML ke DB menggunakan php