ORACLE में अधिकतम और एक और न्यूनतम आदेश के लिए ROWNUM का उपयोग कैसे करें? - एसक्यूएल, ओरेकल, plsql

वर्तमान में मैं 2 शर्त के लिए शीर्ष पंक्ति आउटपुट करने की कोशिश कर रहा हूं। एक अधिकतम है और एक मिनट है। वर्तमान कोड

Select *
from  (MY SELECT STATEMENT order by A desc)
where ROWNUM <= 1

अद्यतन करें अब मैं दोनों स्थितियों के लिए कर सकता हूं। लेकिन मुझे उच्चतम होने की आवश्यकता है, यदि वही है तो बी को सबसे कम जांचें।

E.g आइए कहें कि 2 पंक्तियां हैं, दोनों ए 100 है और बी एक के लिए 50 है और 60 अन्य के लिए है। इस मामले में 100: 50 शेल्ड का चयन किया जाना चाहिए क्योंकि ए एक जैसा है तो बी सबसे कम है।

उदा आइए कहें कि 2 पंक्तियां हैं, ए एक के लिए 100 है और 9 0 अन्य के लिए है, क्योंकि बी को जांचने की आवश्यकता नहीं है।

मैंने अधिकतम और मिनट का उपयोग करने की कोशिश की लेकिन यह विधि बेहतर काम करने लगती है, कोई सुझाव

उत्तर:

जवाब के लिए 3 № 1

खैर, आपके स्पष्टीकरण के बाद, आप एक रिकॉर्ड की तलाश में हैं। मैक्स ए और सबसे छोटे बी के साथ, यदि मैक्स ए के साथ एक से अधिक रिकॉर्ड हैं तो यह बस है:

Select *
from  (MY SELECT STATEMENT order by A desc, B)
where ROWNUM = 1;

इस तरह से पहले उतरते हुए, तो आप सब मिलते हैंअधिकतम एक रिकॉर्ड पहले। फिर यह बी द्वारा टाइप करता है, इसलिए प्रत्येक समूह के अंदर आपको कम से कम बी मिलता है। यह आपको वांछित एक रिकॉर्ड देता है, इससे कोई फर्क नहीं पड़ता कि पाया गया ए अद्वितीय है या नहीं।


जवाब के लिए 0 № 2

या rownun की अनियंत्रण से बचें और इसके बजाय row_number () के लिए जाओ:

SELECT
*
FROM (
SELECT
*
, ROW_NUMBER (ORDER BY A DESC) adesc
, ROW_NUMBER (ORDER BY B ASC)  basc
FROM SomeQuery
)
WHERE adesc = 1
OR basc = 1

पाद लेख: select * केवल एक सुविधा है, कृपया टेबल नाम आदि के साथ आवश्यक वास्तविक कॉलम के साथ प्रतिस्थापित करें।


जवाब के लिए 0 № 3

अगर यह काम करता है तो इसे आज़माएं

Select *
from  (MY SELECT STATEMENT order by A desc)
where ROWNUM <= 1
union
Select *
from  (MY SELECT STATEMENT order by A asc)
where ROWNUM <= 1

जवाब के लिए 0 № 4
SELECT * FROM
(Select foo.*, 0 as union_order
from  (MY SELECT STATEMENT order by A desc) foo
where ROWNUM <= 1
UNION
Select foo.*, 1
from  (MY SELECT STATEMENT order by B asc) foo
where ROWNUM <= 1)
ORDER BY
union_order

संबंधित सवाल
सबसे लोकप्रिय