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

नोट:किसी भी "अनक्लोज्ड" अंतराल को असामान्य के रूप में चिह्नित किया जाएगा; "अमान्य" से "खुले" को अलग करने के लिए अंतराल के लिए अधिक जटिल और महंगी शुरुआत और अंत जांच के बिना, शायद यह सबसे अच्छा किया जा सकता है। एडिटोनल "इंटीग्रिटीचेक" बराबर -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. ये टेबल कैसे संबंधित हैं?

  3. MYSQL के लिए Google OAuth 2.0 उपयोगकर्ता आईडी डेटाटाइप

  4. डेटाबेस में विशिष्ट डेटा पुनर्प्राप्त करने के लिए चेकबॉक्स का उपयोग कैसे करें

  5. दूसरी पीढ़ी का Google क्लाउड SQL - ऐप इंजन