Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Obliczanie różnicy w wierszu daty i godziny między wierszami na tej samej tabeli

Zakładając, że zawsze jest początek dla każdej pauzy i końca, czy coś takiego nie byłoby bardziej bezpośrednie?

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

Nie jestem do końca pewien, jak duże są wartości wychodzące z TO_SECONDS() dla bieżących znaczników czasu; ale jeśli stanowią problem podczas sumowania, jeśli można je zmienić na

   , 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

Możesz wykryć „nieprawidłowe” dane, dodając poniższe do listy wybranych wyrażeń

, 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

Uwaga:wszelkie „niezamknięte” interwały zostaną oznaczone jako nieprawidłowe; bez znacznie bardziej skomplikowanego i kosztownego sprawdzania początku i końca pod kątem interwałów w celu odróżnienia „otwarty” od „nieważny”, jest to prawdopodobnie najlepsze, co można zrobić. Suma użyta do dodatkowego „IntegrityCheck” równa -1 może wskazywać na interwał z otwartym zakończeniem, ale może również wskazywać na błędny podwójny start.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Określ, który plik konfiguracyjny MySQL jest używany

  2. Neo4j - Importuj dane z pliku CSV za pomocą Cypher

  3. JDBC zwraca nieprawidłową liczbę wierszy, których dotyczy problem

  4. SQL Wybieranie z dwóch tabel z wewnętrznym sprzężeniem i limitem

  5. TIMESTAMPDIFF() Przykłady – MySQL