मेरे पास एक सारणी है जिसे मैं "वाई से बाहर रैंक एक्स" डेटा प्रस्तुत करने में सक्षम होना चाहता हूं। विशेष रूप से, मैं उस डेटा को अपेक्षाकृत कुशल तरीके से एक व्यक्तिगत पंक्ति के लिए प्रस्तुत करने में सक्षम होना चाहता हूं (यानी तालिका में प्रत्येक पंक्ति का चयन किए बिना)। रैंकिंग स्वयं काफी सरल है, यह तालिका में एक ही कॉलम पर सीधे आदेश है।मुझे PostgreSQL में "वाई से बाहर रैंक एक्स" डेटा को कैसे संभालना चाहिए?
पोस्टग्रेस इस संबंध में कुछ अनूठी चुनौतियों का सामना करना प्रतीत होता है; AFAICT में उसके पास रैंक या ROW_NUMBER या समकक्ष फ़ंक्शन नहीं है (कम से कम 8.3 में, जिसे मैं इस पल के लिए फंस गया हूं)।
test=> create temporary sequence tmp_seq;
CREATE SEQUENCE
test=*> select nextval('tmp_seq') as row_number, col1, col2 from foo;
यह इस समाधान की तरह लगता है अभी भी मदद नहीं करेगा जब मैं मेज से केवल एक ही पंक्ति का चयन करना चाहते: मेलिंग सूची अभिलेखागार में विहित जवाब एक अस्थायी अनुक्रम बनाने और इसे से चयन करने के लिए हो रहा है (और मैं इसे पीके द्वारा चुनना चाहता हूं, रैंक द्वारा नहीं)।
मैं रैंक को एक अलग कॉलम में डिमॉर्मलाइज और स्टोर कर सकता हूं, जो डेटा को छोटा करता है, लेकिन मेरी समस्या को स्थानांतरित करता है। अद्यतन द्वारा आदेश का समर्थन नहीं करता है, इसलिए मुझे यकीन नहीं है कि मैं रैंक सेट करने के लिए एक अद्यतन क्वेरी कैसे बनाऊंगा (प्रत्येक पंक्ति का चयन करने और प्रत्येक पंक्ति के लिए एक अलग अद्यतन चलाने के लिए, जो कि बहुत अधिक डीबी गतिविधि की तरह लगता है हर बार रैंक को अद्यतन करने की आवश्यकता होती है)।
क्या मुझे कुछ याद आ रही है? ऐसा करने का सही तरीका क्या है?
संपादित करें: स्पष्ट रूप से मैं पर्याप्त स्पष्ट नहीं था। मुझे ऑफसेट/एलआईटी के बारे में पता है, लेकिन मुझे नहीं लगता कि यह इस समस्या को हल करने में कैसे मदद करता है। मैं Xth- रैंकिंग आइटम का चयन करने की कोशिश नहीं कर रहा हूं, मैं एक मनमानी आइटम (अपने पीके द्वारा कहने के लिए) चुनने की कोशिश कर रहा हूं, और फिर उपयोगकर्ता को "312 में से 43 वें स्थान पर" प्रदर्शित करने में सक्षम हूं।
वह वाक्यविन्यास निश्चित रूप से बहुत अच्छा है। शायद मुझे यह विचार करना होगा कि इसे अपग्रेड करने के लिए क्या करना होगा। –
अभी तक, मुझे कभी-कभी डिज़ाइन किए गए डेटाबेस के साथ अपग्रेड करने में कोई समस्या नहीं आई है, जबकि लाभ असंख्य हैं। हालांकि, मेरे ग्राहकों में से एक ने पाया कि नई 'हैशएग्रेगेट' विधि के साथ, 'DISTINCT' अब जरूरी नहीं है कि उसके कुछ प्रश्न तोड़ दिए। यह निश्चित रूप से दोषी है, लेकिन सुनिश्चित करें कि आपके प्रश्न इन चाल पर भरोसा नहीं करते हैं। – Quassnoi
मूल प्रश्न 8.3 निर्दिष्ट है, लेकिन मैंने फैसला किया कि यह इन कार्यों तक पहुंच प्राप्त करने के लिए 8.4 तक अपग्रेड करने योग्य था। महान काम करना, उत्तर के लिए धन्यवाद! –