2011-02-20 6 views
7

है तो मेरे पास वर्चर्स फ़ील्ड है जो अक्षरों का कोड है और ऑटो बढ़ी है (मैन्युअल), इसलिए जब तक ज़ेड एए बन जाता है तब तक ए बी के बाद।जब कॉलम वर्चर

SELECT MAX(letter) from jobs 

रिटर्न जेड बजाय ए.ए. की: जब मैं ए.ए. मारा और मैं इस क्षेत्र के मैक्स के चयन का प्रयास

मेरे मुद्दा है। यदि आप नामों का ऑर्डर कर रहे हैं तो यह सही है, लेकिन मेरे पास एक कोड है। यह अधिकार पाने का एक तरीका है?

उत्तर

2

इससे मदद मिल सकती है? उन्हें पहले लंबाई से क्रमबद्ध करें, फिर अक्षर से।

SELECT letter FROM jobs 
ORDER BY LENGTH(letter) DESC, letter DESC 
LIMIT 0, 1 
+0

यह अभी भी इनपुट सेट [ए..जेड, एए] के लिए जेड देने जा रहा है। – paxdiablo

+0

क्षमा करें, संपादित होने के बाद संपादित किया गया कि मैं सही ढंग से पढ़ने के लिए बेवकूफ था। – jocull

8

इसे आजमाएं।

SELECT letter 
FROM jobs 
ORDER BY LENGTH(letter) DESC, letter DESC 
LIMIT 1; 

संपादित करें:: यह इसे कम तार की तुलना में अधिक होने के रूप में लंबे समय तक तार वजन करने के लिए बाध्य करेगा हाँ, DESC सॉर्ट करने के लिए मैक्स पाने के लिए ...

+0

+1, यह मेरे सबक्वायरी समाधान से बेहतर है। यदि आप प्रति-पंक्ति कार्यों के प्रदर्शन हत्यारे से बचना चाहते हैं तो ध्यान में रखना एक बात है कि एक और (अनुक्रमित) कॉलम होना चाहिए जिसे letter_len कहा जाता है जो एक सम्मिलित/अद्यतन ट्रिगर द्वारा पॉप्युलेट किया जाता है, फिर उस खंड का उपयोग करें। इससे सभी पढ़ने में गणना की लागत (डेटा परिवर्तन होने पर किया जाता है), पर्याप्त रूप से प्रश्नों को तेज़ी से बढ़ाएगा। – paxdiablo

+0

यह काम करता है। आपका बहुत बहुत धन्यवाद। –

1

जब से तुम की अधिकतम के बाद कर रहे हैं भूल गया सबसे लंबा फ़ील्ड, मैं निम्न की तरह कुछ शुरू कर दूंगा। मुझे यकीन नहीं है कि वाक्यविन्यास सही है या नहीं। असल में आपको सबसे लंबे समय तक कॉलम मानों को अनदेखा करना होगा।

select max(letter) from jobs 
where len(letter) = (
    select max(len(letter)) from jobs 
) 

जो भी समाधान आप चुनते हैं, एक और स्तंभ अक्षर लंबाई धारण करने के लिए जोड़ने का विकल्प पर विचार करने और यह एक सम्मिलित/अपडेट ट्रिगर द्वारा नियंत्रित है (यह मानते हुए MySQL छोटा है)।

उस कॉलम को अनुक्रमणित करके, आप select के दौरान प्रति-पंक्ति कार्यों को हटाते समय अपने प्रश्नों को तेज़ी से बढ़ा सकते हैं। लागत का खर्च करने का सही समय तब होता है जब डेटा बदलता है ताकि गणना की लागत सभी पाठों में अमूर्त हो।

यह उन स्थितियों में काम नहीं करेगा जहां डेटाबेस को पढ़ने से अधिक बार लिखा जाता है, लेकिन वे मेरे अनुभव में अपेक्षाकृत दुर्लभ हैं।

0

क्या आपके पास अपने क्षेत्र की अधिकतम लंबाई है? यदि हां, तो क्या आप उस क्षेत्र में डेटा को सही-सही साबित कर सकते हैं? संभावना है कि उत्तर (1) अनुभवजन्य 'हां' हैं, और 5 ऊपरी लंबाई हो सकते हैं, और (2) वास्तव में नहीं।

  • '☐☐☐☐A'
  • ...
  • : लेकिन, आप कहने के लिए 'हां' दोनों के लिए है, तो आप (जहां बक्से रिक्त स्थान हैं) इस का उपयोग करने में सक्षम होगा सक्षम थे
  • '☐☐☐☐Z'
  • '☐☐☐AA'
  • '☐☐☐AB'
  • ...
  • '☐☐☐BA'
  • ...
  • '☐☐☐ZZ'
  • '☐☐AAA'

वास्तविक, कि शायद आप के लिए ठीक होने के लिए नहीं जा रहा है, और इसलिए यह मदद नहीं करेगा।

संबंधित मुद्दे