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

घंटे के आधार पर समूह तिथि अंतर के लिए ओरेकल क्वेरी

मूल रूप से, इसे हल करने के लिए आपको केवल संख्याओं की एक सूची चाहिए।

with nums as (
      select 0.0 as n from dual
      union all
      select n + 1
      from nums
      where n < 100
    )
select trunc(t.startdate + n * 1/ 24, 'hh'),
       sum((case when trunc(t.startdate + n * 1/24, 'hh') = trunc(t.startdate, 'hh')
                 then 60 - extract(minute from startdate)
                 else 0
            end) +
           (case when trunc(t.startdate + n * 1/24, 'hh') > trunc(t.startdate, 'hh') and
                      trunc(t.startdate + n * 1/24, 'hh') < trunc(t.enddate, 'hh')
                 then 60
                 else 0
            end) +
           (case when trunc(t.startdate + n * 1/24, 'hh') = trunc(t.enddate, 'hh')
                 then extract(minute from enddate)
                 else 0
            end)
           ) as minutes
from table t join
     nums n
     where trunc(t.startdate + n * 1/24, 'hh') <= t.enddate;

यह तारीखों में 100 घंटे के अंतर तक काम करता है। आप 100 . को एडजस्ट कर सकते हैं आपकी आवश्यकताओं के लिए। आप सही अधिकतम मान प्राप्त करने के लिए एक सबक्वेरी का उपयोग भी कर सकते हैं।

कुछ तरकीबें हैं जो तर्क को सरल बना सकती हैं। मुझे लगता है कि उपरोक्त तर्क स्पष्ट है। यह घंटों के माध्यम से चक्र करता है। यदि तुलना किया गया घंटा पहला घंटा है, तो 60 - मिनट का उपयोग करें। यदि अंतिम है, तो मिनटों का उपयोग करें। अन्यथा, 60 का उपयोग करें।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कोड द्वारा फ़ाइल tnsnames.ora का स्थान प्राप्त करना

  2. oracle में IN फ़ंक्शन के लिए अल्पविराम द्वारा अलग किए गए मान

  3. एसक्यूएल स्ट्रिंग में एम्पर्सेंड चरित्र से बचना

  4. ORA-01591 - Oracle दूरस्थ sql सर्वर तालिका से डेटा हटाता है

  5. Oracle पारदर्शी डेटा एन्क्रिप्शन अनक्रिप्टेड एक्सेस