मुझे अपने उत्पाद को संगत करने के लिए SQL सर्वर से ओरेकल तक संग्रहीत प्रक्रियाओं को परिवर्तित करने में कठिनाई हो रही है।ओरेकल ऑर्डर BY और ROWNUM का सही तरीके से उपयोग कैसे करें?
मैं प्रश्नों जो कुछ तालिकाओं के सबसे हाल ही में रिकॉर्ड देता है, एक टाइमस्टैम्प के आधार पर है:
एसक्यूएल सर्वर:
SELECT TOP 1 *
FROM RACEWAY_INPUT_LABO
ORDER BY t_stamp DESC
=> कि मुझे हाल ही में रिकॉर्ड रिटर्न
लेकिन ओरेकल:
SELECT *
FROM raceway_input_labo
WHERE rownum <= 1
ORDER BY t_stamp DESC
=>ORDER BY
कथन के बावजूद, यह मुझे सबसे पुराना रिकॉर्ड (शायद सूचकांक के आधार पर) देता है!
SELECT *
FROM
(SELECT *
FROM raceway_input_labo
ORDER BY t_stamp DESC)
WHERE rownum <= 1
और यह काम करता है:
मैं ओरेकल क्वेरी इस तरह से मेरी आवश्यकताओं से मेल करने समझाया। लेकिन यह मेरे लिए एक भयानक हैक की तरह लगता है, खासकर यदि मेरे पास शामिल तालिकाओं में बहुत सारे रिकॉर्ड हैं।
इसे प्राप्त करने का सबसे अच्छा तरीका क्या है?
(http://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197 [ROWNUM और सीमित परिणाम पर]। एचटीएमएल) –
आपने अपनी अंतिम क्वेरी में क्या किया है वह सही है। आप रिकॉर्ड्स की ऑर्डर की गई सूची की पहली पंक्ति का चयन करते हैं। बस क्वेरी encapsulation। – araknoid
यह मैनुअल में स्पष्ट रूप से प्रलेखित है: http://docs.oracle.com/cd/E11882_01/server.112/e26088/pseudocolumns009.htm#i1006297 –