मेरे पास यह प्रश्न है:

SELECT SUM(change_percent) 
FROM api.security_price 
WHERE date = (SELECT MAX(date) FROM api.security_price)
AND symbol in ('AAPL','TSLA','MSFT');

यह थोड़ा धीमा चलता है, जिसमें इंडेक्स शामिल हैं। इसके बजाय, मैं SELECT DISTINCT ON (symbol) का परीक्षण करना चाहता हूं।

यही कारण है कि मैं DISTINCT ON का उपयोग करना चाहता हूं:

  • प्रदर्शन में वृद्धि होगी। Max() चीजों को धीमा कर सकता है।
  • मुझे अपने symbol फ़ील्ड में प्रत्येक आइटम के लिए नवीनतम पंक्ति (उर्फ दिनांक) प्राप्त करने में सक्षम होना चाहिए। DISTINCT ON अगर ठीक से सेट अप किया जाए तो वह ऐसा कर सकता है।

हालांकि, मैं ऐसा करने में असफल रहा हूं:

यहां बताया गया है कि मैं इसे कैसे लागू करने का प्रयास करता हूं:

SELECT SUM(change_percent) 
FROM 

     (SELECT DISTINCT ON (symbol) symbol, change_percent FROM api.security_price) AS a 

WHERE a.symbol in ('AAPL','TSLA','MSFT');

यह क्वेरी काम कर रही है (और यह बहुत तेज़ है), लेकिन मुझे सही गणना नहीं मिल रही है। मैं अपनी नई क्वेरी में सब कुछ सही तरीके से कैसे सेट कर सकता हूं?

1
woof 21 जिंदा 2021, 01:50
1
कृपया अपना प्रश्न संपादित करें (इसके नीचे लिंक संपादित करें) और उस डेटा के आधार पर कुछ नमूना डेटा और अपेक्षित आउटपुट जोड़ें स्वरूपित पाठ। टेक्स्ट टेबल बनाने के तरीके के बारे में स्पष्टीकरण के लिए यहां देखें। (संपादित करें अपना प्रश्न - टिप्पणियों में कोड या अतिरिक्त जानकारी पोस्ट नहीं करें)
 – 
a_horse_with_no_name
21 जिंदा 2021, 01:52

1 उत्तर

सबसे बढ़िया उत्तर

आपकी मूल क्वेरी ठीक होनी चाहिए:

SELECT SUM(change_percent) 
FROM api.security_price 
WHERE date = (SELECT MAX(date) FROM api.security_price) AND
      symbol IN ('AAPL', 'TSLA', 'MSFT');

मैं (date, symbol) पर एक इंडेक्स का सुझाव दूंगा।

यदि आप अधिकतम दिनांक प्रति प्रतीक चाहते हैं, तो क्वेरी होगी:

SELECT SUM(change_percent) 
FROM (SELECT DISTINCT ON (symbol) sp.*
      FROM api.security_price sp
      WHERE symbol IN ('AAPL', 'TSLA', 'MSFT')
      ORDER BY symbol, date DESC
     ) sp

हालांकि, यह आपकी मूल क्वेरी के बराबर होने की गारंटी नहीं है।

1
Gordon Linoff 21 जिंदा 2021, 01:54
आपकी टिप्पणी के लिए धन्यवाद, हाँ, मैंने वास्तव में अभी-अभी उस तिथि पर एक अनुक्रमणिका जोड़ी है, जो मुझे लगा कि मेरे पास है, मुझे दोबारा जाँच करने के लिए धन्यवाद। यह पता चला है कि मेरी मुट्ठी की क्वेरी डिस्टिंक्ट ऑन के साथ दूसरे की तुलना में 20x तेज है।
 – 
woof
21 जिंदा 2021, 02:07