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

Menghitung perbedaan pada baris datetime antara baris pada tabel yang sama

Dengan asumsi selalu ada awal untuk setiap jeda dan akhir, bukankah hal seperti ini akan lebih langsung?

SELECT t.task
   , SUM(TO_SECONDS(t.stime) 
         * CASE WHEN t.status IN (1) THEN -1
                WHEN t.status IN (2, 3) THEN 1
                ELSE 0
           END
     ) AS totalTimeSecs
FROM tblwork AS task
GROUP BY t.task

Saya tidak begitu yakin seberapa besar nilai yang keluar dari TO_SECONDS() untuk stempel waktu saat ini; tetapi jika menjadi masalah saat dijumlahkan, jika dapat diubah menjadi

   , SUM((TO_SECONDS(t.stime) - some_constant_just_before_or_at_your_earliest_seconds)
         * CASE WHEN t.status IN (1) THEN -1
                WHEN t.status IN (2, 3) THEN 1
                ELSE 0
           END
     ) AS totalTimeSecs

Anda dapat mendeteksi data "abnormal" dengan menambahkan yang berikut ini ke daftar ekspresi pilihan

, CASE WHEN SUM(CASE 
                WHEN t.status IN (1) THEN -1 
                WHEN t.status IN (2, 3) THEN 1 
                ELSE 0 END
              ) = 0 
       THEN 'OK' 
       ELSE 'ABNORMAL' 
   END AS integrityCheck

Catatan:setiap interval "tidak tertutup" akan ditandai sebagai tidak normal; tanpa pemeriksaan awal dan akhir yang jauh lebih rumit dan mahal untuk interval untuk membedakan "terbuka" dari "tidak valid", itu mungkin yang terbaik yang bisa dilakukan. Jumlah yang digunakan untuk "Pemeriksaan integritas" tambahan yang menyamai -1 mungkin mengisyaratkan interval berakhir terbuka, tetapi juga bisa menunjukkan awal ganda yang salah.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mengatur daftar teman di mysql

  2. Urutan pengurutan default di MySQL (ALTER TABLE ... ORDER BY ...;)

  3. Buat tabel dengan nama kolom yang berasal dari nilai baris tabel lain

  4. Cara Bekerja dengan Subquery MySQL

  5. KESALAHAN 1878 (HY000):Kegagalan penulisan file sementara