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

Oracle sql में निकटतम तिथियाँ कैसे प्राप्त करें?

आपको अन्य समाधानों के विपरीत समस्या को हल करने के लिए केवल एक कार्टेशियन जॉइन का उपयोग करना होगा, जो एकाधिक का उपयोग करता है। मुझे लगता है कि समय को VARCHAR2 के रूप में संग्रहीत किया जाता है। यदि इसे दिनांक के रूप में संग्रहीत किया जाता है तो आप TO_DATE फ़ंक्शन को हटा सकते हैं। यदि इसे एक तिथि के रूप में संग्रहीत किया जाता है (मैं इसकी अत्यधिक अनुशंसा करता हूं), तो आपको तारीख के हिस्से को हटाना होगा

मैंने इसे थोड़ा वर्बोज़ बना दिया है, इसलिए यह स्पष्ट है कि क्या हो रहा है।

select *
  from ( select id, tm
              , rank() over ( partition by t2id order by difference asc ) as rnk
           from ( select t1.*, t2.id as t2id
                       , abs( to_date(t1.tm, 'hh24:mi:ss') 
                              - to_date(t2.tm, 'hh24:mi:ss')) as difference
                    from t1
                   cross join t2
                         ) a
                 )
 where rnk = 1

मूल रूप से, यह T1 और T2 में हर बार के बीच पूर्ण अंतर को काम करता है, फिर T2 ID द्वारा सबसे छोटा अंतर चुनता है; T1 से डेटा लौटा रहा है।

यहाँ यह SQL Fiddle फ़ॉर्मैट में है ।

कम सुंदर (लेकिन छोटा) प्रारूप है:

select *
  from ( select t1.*
              , rank() over ( partition by t2.id 
                                  order by abs(to_date(t1.tm, 'hh24:mi:ss') 
                                            - to_date(t2.tm, 'hh24:mi:ss'))
                                  ) as rnk
           from t1
          cross join t2
                ) a
 where rnk = 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. संख्या कॉलम में Oracle 2 हाइफ़न?

  2. dbms_xplan.display के साथ भ्रमित

  3. Oracle SQL डेवलपर में टेबलस्पेस कैसे जांचें?

  4. ओरेकल - उपयोगकर्ता को एकाधिक पंक्तियों को सम्मिलित करने के लिए कैसे बाध्य करें

  5. जावा में पीएल/एसक्यूएल फ़ंक्शन को कॉल करें?