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

Jumlahkan Selisih Tanggal Beberapa Baris Mysql

Untuk setiap baris, temukan baris pertama dengan LogDate yang lebih tinggi (nanti). Jika kecepatan pada baris ini kurang dari 10, hitung perbedaan tanggal antara tanggal baris ini dan tanggal baris berikutnya, jika tidak masukkan 0.

Kueri yang akan memberikan daftar nilai yang dihitung dengan cara ini akan terlihat seperti:

SELECT ( SELECT IF( c1.speed <10, unix_timestamp( c2.LogDate ) - unix_timestamp( c1.logdate ) , 0 )
           FROM car_log c2
           WHERE c2.LogDate > c1.LogDate
           LIMIT 1
       ) AS seconds_below_10
FROM car_log c1

Sekarang tinggal menyimpulkannya saja:

SELECT sum( seconds_below_10) FROM 
( SELECT ( SELECT IF( c1.speed <10, unix_timestamp( c2.LogDate ) - unix_timestamp( c1.logdate ) , 0 )
           FROM car_log c2
           WHERE c2.LogDate > c1.LogDate
           LIMIT 1
          ) AS seconds_below_10
  FROM car_log c1 ) seconds_between_logs

Perbarui setelah komentar tentang menambahkan CarId:

Ketika Anda memiliki lebih dari 1 mobil, Anda perlu menambahkan satu lagi kondisi WHERE di dalam subquery dependen (kami ingin log berikutnya untuk mobil yang tepat itu, bukan sembarang log berikutnya) dan mengelompokkan seluruh baris berdasarkan CarId, mungkin menambahkan CarId tersebut ke pilih untuk ditampilkan itu juga.

SELECT sbl.carId, sum( sbl.seconds_below_10 ) as `seconds_with_speed_less_than_10` FROM
( SELECT c1.carId, 
         ( SELECT IF( c1.speed <10, unix_timestamp( c2.LogDate ) - unix_timestamp( c1.logdate ) , 0 )
           FROM car_log c2
           WHERE c2.LogDate > c1.LogDate AND c2.carId = c1.carId
           LIMIT 1 ) AS seconds_below_10
  FROM car_log c1 ) sbl
GROUP BY sbl.carId

Lihat contoh di Sqlfiddle .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. $this->db->insert_id(); mengembalikan 0 setiap kali di codeigniter

  2. Mengompresi teks sebelum menyimpannya di database

  3. Aplikasi untuk merekayasa balik MySQL &PostgreSQL DB?

  4. Setel ulang kata sandi root di MySQL 8

  5. permintaan MySQL. Apa perbedaan antara Gabung dan SubQuery?