Mysql
 sql >> база данни >  >> RDS >> Mysql

Изчисляване на разликата в реда за дата и час между редовете в същата таблица

Ако приемем, че винаги има начало за всяка пауза и край, няма ли нещо подобно да е по-директно?

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

Не съм съвсем сигурен колко големи са стойностите, които излизат от TO_SECONDS() за текущите времеви марки; но ако са проблем при сумиране, ако може да се промени на

   , 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

Можете да откриете "ненормални" данни, като добавите следното към списъка с изрази за избор

, 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

Забележка:всички "незатворени" интервали ще бъдат маркирани като необичайни; без много по-сложни и скъпи начални и крайни проверки за интервали за разграничаване на "отворено" от "невалидно", това е може би най-доброто, което може да се направи. Сборът, използван за допълнителен "integrityCheck", равен на -1, може да намекне за отворен интервал, но също така може да показва погрешно двойно начало.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да намеря серийни номера без празнина в mysql?

  2. как да почистите конфигурационния файл на кеша на Laravel Bootstrap?

  3. SQL изявление - ИЗБЕРЕТЕ обратната на тази заявка

  4. Mysql не може да се свърже с локален сървър чрез сокет на Amazon EC2

  5. MYSQL Изхвърля само определени редове