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

एकाधिक रिकॉर्ड पर Oracle अधिकतम तिथि चुनें

मुझे लगता है कि आपको जोड़ने की जरूरत है...

AND outside.asset_tag=inside.asset_tag

...आपके ON . में मापदंड के अनुसार सूची।

साथ ही एक RIGHT OUTER JOIN आवश्यकता नहीं है। एक INNER JOIN वही परिणाम देगा (और अधिक कुशल हो सकता है), क्योंकि asset_tag के संयोजन नहीं हो सकते हैं और last_read_date सबक्वेरी में जो mp_vehicle_asset_profile . में मौजूद नहीं है ।

फिर भी, "संबंध" होने पर क्वेरी प्रति एसेट टैग की एक से अधिक पंक्ति लौटा सकती है -- यानी, एक ही last_read_date वाली एकाधिक पंक्तियां . इसके विपरीत, @ लामक का विश्लेषणात्मक-आधारित उत्तर मनमाने ढंग से इस स्थिति में ठीक एक पंक्ति का चयन करेगा।

आपकी टिप्पणी से पता चलता है कि आप उच्चतम mtr_reading . वाली पंक्ति चुनकर संबंध तोड़ना चाहते हैं last_read_date . के लिए ।

आप ORDER BY बदलकर ऐसा करने के लिए @ Lamak के विश्लेषणात्मक-आधारित उत्तर को संशोधित कर सकते हैं OVER . में इसके लिए खंड:

ORDER BY last_read_date DESC, mtr_reading DESC

यदि अभी भी संबंध हैं (अर्थात, एक ही asset_tag . के साथ एकाधिक पंक्तियाँ , last_read_date , और mtr_reading ), क्वेरी फिर से अचानक से ठीक एक पंक्ति को चुन लेगी।

आप उच्चतम mtr_reading . का उपयोग करके संबंध तोड़ने के लिए मेरे समग्र-आधारित उत्तर को संशोधित कर सकते हैं इस प्रकार:

SELECT  
    outside.asset_tag, 
    outside.description,
    outside.asset_type,
    outside.asset_group,
    outside.status_code,
    outside.license_no,
    outside.rentable_yn,
    outside.manufacture_code,
    outside.model,
    outside.manufacture_vin,
    outside.vehicle_yr,
    outside.meter_id,
    outside.mtr_uom,
    outside.mtr_reading,
    outside.last_read_date 
FROM 
    mp_vehicle_asset_profile outside 
    INNER JOIN 
    ( 
        SELECT
            asset_tag, 
            MAX(last_read_date) AS last_read_date,
            MAX(mtr_reading) KEEP (DENSE_RANK FIRST ORDER BY last_read_date DESC) AS mtr_reading
        FROM
            mp_vehicle_asset_profile 
        GROUP BY
            asset_tag 
    ) inside 
    ON 
        outside.asset_tag = inside.asset_tag
        AND
        outside.last_read_date = inside.last_read_date
        AND
        outside.mtr_reading = inside.mtr_reading

यदि अभी भी संबंध हैं (अर्थात, एक ही asset_tag . के साथ एकाधिक पंक्तियाँ , last_read_date , और mtr_reading ), क्वेरी फिर से एक से अधिक पंक्तियाँ लौटा सकती है।

एक अन्य तरीका है कि विश्लेषणात्मक- और कुल-आधारित उत्तर भिन्न हैं, उनके नल के उपचार में है। अगर कोई asset_tag , last_read_date , या mtr_reading शून्य हैं, विश्लेषणात्मक-आधारित उत्तर संबंधित पंक्तियों को लौटाएगा, लेकिन समग्र-आधारित उत्तर नहीं देगा (क्योंकि शामिल होने में समानता की स्थिति TRUE का मूल्यांकन नहीं करती है। जब एक नल शामिल होता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. हाइबरनेट क्वेरी लैंग्वेज में लेफ्ट जॉइन कैसे करें?

  2. एक XSD दिनांक xs:dateTime को Oracle दिनांक में कनवर्ट करना

  3. एसक्यूएल अपडेट के लिए लॉक की गई क्वेरी और जावा मल्टी थ्रेडिंग छोड़ें - इसे कैसे ठीक करें

  4. कॉलम ए में कॉलम बी के मान के साथ पंक्तियों को भरें यदि कॉलम ए में शर्त पूरी होती है

  5. मैं कीबोर्ड से जो टाइप करता हूं वह अनावश्यक रूप से rlwrap इकोस क्यों करता है?