2008-10-02 10 views
6

मैं दैनिक लेनदेन रिपोर्ट पूछने के लिए sybase डेटाबेस का उपयोग कर रहा हूं। मेरे पास मेरी लिपि के भीतर सबक्वायरी थी।क्या एसक्यूएल क्वेरी में SELECT LAST जैसी कोई चीज है?

यहाँ

के रूप में यह जाता है:

Subquery अधिक वापस नहीं लौट सकते एक से महत्व देता

मेरे मान हैं 7.50:

SELECT orders.accountid ,items.x,etc 
(SELECT charges.mistotal FROM charges where items.id = charges.id) 
FROM items,orders 
WHERE date = '2008-10-02' 

यहाँ मैं के रूप में त्रुटि संदेश मिल रहा है , 25.00

मैं 25.00 लौटना चाहते, लेकिन जब मैं का उपयोग

(SELECT TOP 1 charges.mistotal FROM charges where items.id = charges.id) 

मेरे परिणाम 7.50 है, लेकिन मैं 25.00

करता है किसी को भी किसी भी बेहतर सुझाव है वापस जाने के लिए करना चाहते हैं?

+0

आप पूर्ण क्वेरी क्यों नहीं पोस्ट करते हैं और समझाते हैं कि आप "अंतिम" शुल्क कैसे प्राप्त करेंगे। मुख्य मूल्य। शेष क्वेरी के आधार पर और "आखिरी" से आपका क्या मतलब है, आप सबक्वायरी को किसी अन्य जॉइन और एक समग्र फ़ंक्शन के साथ प्रतिस्थापित करने में सक्षम हो सकते हैं। हमें विवरण चाहिए! :) – Matt

उत्तर

2

7.5 के बजाय 25.00 का चयन करने के लिए आप किन मापदंडों का चयन करते हैं?

यदि यह अधिकतम मूल्य से संबंधित है, तो आप उस क्षेत्र पर MAX() फ़ंक्शन का उपयोग करने का प्रयास कर सकते हैं।

तो कालक्रम के अनुसार अंतिम पंक्ति के लिए इससे संबंधित कहा, datetime मैदान पर मैक्स() का उपयोग कर, यदि आप घंटे और मिनट में यह जोड़ा गया है पर जानकारी के लिए प्रयास करें।

1

आप इस कोशिश कर सकते:

SELECT MAX(charges.mistotal) FROM charges WHERE items.id = charges.id 
9
SELECT TOP 1 * 
FROM dbo.YourTable 
ORDER BY Col DESC 

आपके मामले में, मुझे लगता है कि है कि हो सकता है

SELECT TOP 1 charges.mistotal 
FROM charges where items.id = charges.id 
ORDER BY charges.mistotal DESC 
+0

मुझे लगता है कि वह अंतिम आदेश दर्ज करना चाहता है, अधिकतम आदेश दर्ज नहीं किया गया ... – CodeRedick

0

चयन टॉप 1 आरोपों जहां items.id शुल्क = से charges.mistotal। आईडी शुल्क द्वारा आदेश। डीईएससी

खंड द्वारा आदेश यह सुनिश्चित करेगा कि यह वापस आ जाएगा आईडी, और डीईएससी का अर्थ उतरना है जिससे यह आपको सबसे बड़ा (नवीनतम) मूल्य प्रदान करेगा। निश्चित रूप से शीर्ष 1 सुनिश्चित करता है कि आप बस उसे प्राप्त करें।

0

अपनी सबक्वायरी को सॉर्ट करें। यदि आप "अंतिम" मान चाहते हैं, तो आपको यह निर्धारित करने की आवश्यकता है कि आप यह निर्धारित करते हैं कि कौन सा आइटम आखिरी आता है (याद रखें, SQL परिणाम सेट डिफ़ॉल्ट रूप से अनियंत्रित हैं)।

उदाहरण के लिए:

(SELECT TOP 1 charges.mistotal FROM charges where items.id = charges.id 
ORDER BY charges.mistotal DESC) 

यह 25.00 के बजाय 7.50 (ऊपर अपने डेटा उदाहरण से) वापसी होगी, लेकिन मुझे लगता है कि आप यह मान "पिछले" होना चाहता हूँ, क्योंकि यह बड़ा है यह सोचते हैं रहा हूँ। कुछ अन्य क्षेत्र हो सकते हैं जो आपके लिए सॉर्ट करने के लिए अधिक समझ में आता है; हो सकता है कि आपके पास टाइमस्टैम्प कॉलम हो, उदाहरण के लिए, और आप उस पर सबसे बड़ा मूल्य के बजाय सबसे हालिया मूल्य प्राप्त करने के लिए सॉर्ट कर सकते हैं। कुंजी सिर्फ "आखिरी" से आपका मतलब क्या परिभाषित कर रही है।

+0

जब मैं अपने सबक्वायरी में ऑर्डर द्वारा ऑर्डर करता हूं तो यह मुझे ORDER के पास वाक्यविन्यास त्रुटि देता है ... – jbcedge

+0

मैं साइबेस का उपयोग नहीं करता (मैं और अधिक हूं एमएस एसक्यूएल सर्वर लड़का का), लेकिन मुझे पूरा यकीन है कि यह मानक वाक्यविन्यास है कि किसी भी rdbms को लागू करना चाहिए। मैं बस इतना कह सकता हूं कि आपका वाक्यविन्यास जांचें। – Matt

1

तो, आप उलटा आदेश का उपयोग कर सकते हैं:,

(SELECT TOP 1 charges.mistotal 
    FROM charges 
    WHERE items.id = charges.id 
    ORDER BY charges.mistotal DESC 
) 
असल

जब से तुम एक स्पष्ट आदेश नहीं दिया, लौट आए परिणामों के अनुक्रम अपरिभाषित है, और तुम सिर्फ भाग्यशाली है कि यह आपको दे दी हैं जवाब जो आप नहीं चाहते थे; यह आपको वह जवाब दे सकता था जो आप चाहते थे, और फिर आपने यह नहीं देखा होगा कि उत्पादन के बाद तक यह हमेशा सही नहीं था।

या, आप उपयोग कर सकते हैं:

(SELECT MAX(charges.mistotal) 
    FROM charges 
    WHERE charges.id = items.id 
) 

या आप वास्तव में एक योग चाहते थे?

1

पहले प्राप्त करने के लिए आप चयन शीर्ष 1 का उपयोग करें। पहले * तालिका ऑर्डर आरोही अंतिम प्राप्त करने के लिए, बस अपना ऑर्डर उलटा करें।

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