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

mysql में एक ही तालिका में पंक्तियों की तुलना करें

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

अपनी तालिका 'TAB' को कॉल करना, 'ट्रेडर' का उपयोग करके शामिल होना, और ऑर्डर प्रदान करने के लिए 'ID' का उपयोग करना, क्वेरी के लिए तीन-तरफ़ा सेल्फ-जॉइन की आवश्यकता होगी जैसे कि:

SELECT a.trader
     , SUM(IF(a.price > b.price, 1, 0)) nbr_incr
     , SUM(IF(a.price < b.price, 1, 0)) nbr_decr
     , SUM(IF(a.price = b.price, 1, 0)) nbr_same
  FROM tab a
  JOIN tab b 
    ON a.trader = b.trader AND a.id > b.id
  LEFT OUTER JOIN tab c 
    ON a.trader = c.trader AND a.id > c.id AND b.id < c.id
 WHERE c.id IS NULL
 GROUP BY a.trader

उपरोक्त क्वेरी तालिका को दो बार स्वयं से जोड़ती है ताकि प्रत्येक टैब निम्नलिखित का प्रतिनिधित्व करे:

  • टैब ए :तुलना के लिए नवीनतम पंक्ति
  • टैब बी :तुलना करने के लिए तुरंत पहले की पंक्ति
  • टैब सी :ए और बी के बीच की एक पंक्ति समय के अनुसार (अस्तित्व में नहीं होनी चाहिए)

हम 'टैब सी' में बाएं बाहरी जॉइन करते हैं क्योंकि हम वास्तव में उस पंक्ति को अस्तित्व में नहीं रखना चाहते हैं। जहां क्लॉज में, हम अपने परिणामों को केवल उन परिणामों के लिए फ़िल्टर करते हैं जहां 'टैब सी' पंक्ति मौजूद नहीं है।

अंत में, क्वेरी व्यापारी पर एक 'ग्रुप बाय' करती है, और 'ए' और 'बी' पंक्तियों से कीमत की तुलना करके एसयूएम (एस) वेतन वृद्धि और कमी करती है।

यह एक मजेदार चुनौती थी। आशा है कि यह मदद करता है!

जॉन...




  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. निम्न तालिका से आइटम का चयन करने के लिए SQL क्वेरी लिखना

  3. MySQL में COUNT(*) होने से हटाएं

  4. MySql.Data.MySqlClient.MySqlException:टाइमआउट समाप्त हो गया

  5. कमांड लाइन के माध्यम से विंडोज़ पर mysqldump का उपयोग करके SQL फ़ाइल कैसे आयात करें