Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

प्रति दिन ओवरटाइम की गणना करें

आप ऐसा कुछ कर सकते हैं

SELECT empno, date_created, time_in, time_out, 
       CASE WHEN total_hours - 8 > 0 THEN total_hours - 8 ELSE 0 END overtime
  FROM
(
  SELECT empno, date_created, time_in, time_out,
         TIME_TO_SEC(TIMEDIFF(COALESCE(time_out, '17:00:00'),
                              COALESCE(time_in,  '09:00:00'))) / 3600 total_hours
    FROM
  (
    SELECT empno, date_created, 
           MIN(CASE WHEN status = 0 THEN time_created END) time_in,
           MIN(CASE WHEN status = 1 THEN time_created END) time_out
      FROM biometrics
     GROUP BY empno, date_created
  ) a
) b

यह रहा SQLFiddle डेमो

आपको time_in . के लिए वास्तविक डिफ़ॉल्ट मान प्रदान करने की आवश्यकता है और time_out ऐसे मामलों के लिए जब वे NULL . हों . चरम स्थिति में यदि NULL s इस तथ्य के कारण होते हैं कि कर्मचारी एक दिन आते हैं और दूसरे दिन घर जाते हैं, वे डिफ़ॉल्ट मान 00:00:00 हो सकते हैं और 23:59:59 क्रमशः चूंकि आप प्रति कैलेंडर दिन ओवरटाइम की गणना कर रहे हैं।

अपडेट करें: अगर आप overtime चाहते हैं समय प्रारूप में प्रस्तुत किया जाना है

SELECT empno, date_created, time_in, time_out, 
       SEC_TO_TIME(
         CASE WHEN total_sec - 28800 > 0 
              THEN total_sec - 28800 
              ELSE 0 END) overtime
  FROM
(
  SELECT empno, date_created, time_in, time_out,
         TIME_TO_SEC(TIMEDIFF(COALESCE(time_out, '17:00:00'),
                              COALESCE(time_in,  '09:00:00'))) total_sec
    FROM
  (
    SELECT empno, date_created, 
           MIN(CASE WHEN status = 0 THEN time_created END) time_in,
           MIN(CASE WHEN status = 1 THEN time_created END) time_out
      FROM biometrics
     GROUP BY empno, date_created
  ) a
) b

यह रहा 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. मैं MySQL डंप में इन टिप्पणियों से कैसे छुटकारा पा सकता हूं?

  2. MySQL में यूनियन के साथ संयुक्त रैंड फ़ंक्शन का उपयोग कैसे करें

  3. संग्रहीत प्रक्रिया में MySQL गतिशील ट्रिगर निर्माण

  4. डेटटाइम को MySQL में किसी संख्या में कैसे परिवर्तित करें?

  5. LazyInitializationException आलसी आरंभिक उदाहरण प्राप्त करने का प्रयास कर रहा है