Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

मैं MySQL का उपयोग करके शीर्ष% दैनिक मूल्य परिवर्तनों की गणना कैसे कर सकता हूं?

एक समस्या जो मुझे बल्ले से दिखाई दे रही है, वह तारीख के लिए टाइमस्टैम्प डेटा प्रकार का उपयोग कर रही है, यह आपकी एसक्यूएल क्वेरी को दो कारणों से जटिल बना देगा - आपको एक श्रेणी का उपयोग करना होगा या अपने खंड में वास्तविक तिथि में कनवर्ट करना होगा, लेकिन, अधिक महत्वपूर्ण बात यह है कि , चूंकि आप कहते हैं कि आप आज के बंद भाव और कल के बंद भाव में रुचि रखते हैं, इसलिए आपको उन दिनों पर नज़र रखनी होगी जब बाज़ार खुला रहता है - इसलिए सोमवार की क्वेरी मंगल-शुक्र से भिन्न होती है, और किसी भी दिन बाज़ार बंद रहता है छुट्टी का भी हिसाब देना होगा।

मैं mktDay जैसा कॉलम जोड़ूंगा और हर दिन इसे बढ़ाऊंगा जब बाजार व्यापार के लिए खुला हो। एक और तरीका 'पिछला बंद' कॉलम शामिल करना हो सकता है जो आपकी गणना को छोटा बनाता है। मुझे एहसास है कि यह सामान्य रूप का उल्लंघन करता है, लेकिन यह आपकी क्वेरी में एक महंगे सेल्फ जॉइन को बचाता है।

यदि आप संरचना को नहीं बदल सकते हैं, तो आप कल के करीब आने के लिए एक सेल्फ जॉइन करेंगे और आप चाहें तो उस% परिवर्तन द्वारा% परिवर्तन और क्रम की गणना कर सकते हैं।

नीचे एरिक का कोड है, इसे माइस्क्ल 5.0.27 चलाने वाले मेरे सर्वर पर निष्पादित थोड़ा सा साफ किया गया है

select
   p_today.`ticker`,
   p_today.`date`,
   p_yest.price as `open`,
   p_today.price as `close`,
   ((p_today.price - p_yest.price)/p_yest.price) as `change`
from
   prices p_today
   inner join prices p_yest on
       p_today.ticker = p_yest.ticker
       and date(p_today.`date`) = date(p_yest.`date`) + INTERVAL 1 DAY
       and p_today.price > 0
       and p_yest.price > 0
       and date(p_today.`date`) = CURRENT_DATE
order by `change` desc
limit 10

बैक-टिक पर ध्यान दें क्योंकि आपके कुछ कॉलम नाम और एरिक के उपनाम आरक्षित शब्द थे।

यह भी ध्यान दें कि पहली तालिका के लिए जहां क्लॉज का उपयोग करना एक कम खर्चीला प्रश्न होगा - जहां पहले निष्पादित किया जाता है और केवल उन पंक्तियों में स्वयं से जुड़ने का प्रयास करना होता है जो शून्य से अधिक होती हैं और आज की तारीख होती है

select
   p_today.`ticker`,
   p_today.`date`,
   p_yest.price as `open`,
   p_today.price as `close`,
   ((p_today.price - p_yest.price)/p_yest.price) as `change`
from
   prices p_today
   inner join prices p_yest on
       p_today.ticker = p_yest.ticker
       and date(p_today.`date`) = date(p_yest.`date`) + INTERVAL 1 DAY

       and p_yest.price > 0
where p_today.price > 0
    and date(p_today.`date`) = CURRENT_DATE
order by `change` desc
limit 10


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एनोटेशन का उपयोग करके सिद्धांत 2 में एक पूर्ण टेक्स्ट इंडेक्स जोड़ें?

  2. केस संवेदनशील होने के लिए आप MySQL LIKE को कैसे मजबूर करते हैं?

  3. क्या केस का उपयोग किए बिना MySQL में कॉलम में पंक्तियों को पिवट करने का कोई तरीका है?

  4. JQuery/AJAX और PHP/MySQL का उपयोग कर पहले ड्रॉपडाउन के चयन के आधार पर दूसरा ड्रॉपडाउन कैसे पॉप्युलेट करें?

  5. PHP और MySQL के साथ यूजर प्रोफाइल कैसे बनाएं