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

MySQL में लैग फ़ंक्शन का अनुकरण करें

यह मेरा पसंदीदा MySQL हैक है।

आप लैग फ़ंक्शन का अनुकरण इस प्रकार करते हैं:

SET @quot=-1;
select time,company,@quot lag_quote, @quot:=quote curr_quote
  from stocks order by company,time;
  • lag_quote पिछली पंक्ति के उद्धरण का मान रखता है। पहली पंक्ति के लिए @quot -1 है।
  • curr_quote वर्तमान पंक्ति के उद्धरण का मान रखता है।

नोट:

  1. order by क्लॉज यहां महत्वपूर्ण है जैसे यह एक नियमित विंडो फ़ंक्शन में है।
  2. आप company . के लिए भी अंतराल का उपयोग करना चाह सकते हैं बस यह सुनिश्चित करने के लिए कि आप एक ही company . के उद्धरणों में अंतर की गणना कर रहे हैं ।
  3. आप उसी तरह पंक्ति काउंटर भी लागू कर सकते हैं @cnt:[email protected]+1

इस योजना के बारे में अच्छी बात यह है कि कुछ अन्य दृष्टिकोणों की तुलना में कम्प्यूटेशनल रूप से बहुत दुबला है, जैसे कि एप्लिकेशन सर्वर में समग्र कार्यों, संग्रहीत प्रक्रियाओं या डेटा को संसाधित करना।

संपादित करें:

अब आपके द्वारा बताए गए प्रारूप में परिणाम प्राप्त करने के आपके प्रश्न पर आते हैं:

SET @quot=0,@latest=0,company='';
select B.* from (
select A.time,A.change,IF(@comp<>A.company,1,0) as LATEST,@comp:=A.company as company from (
select time,company,[email protected] as change, @quot:=quote curr_quote
from stocks order by company,time) A
order by company,time desc) B where B.LATEST=1;

घोंसला सह-संबंधित नहीं है इसलिए उतना बुरा नहीं है (कम्प्यूटेशनल रूप से) जितना दिखता है (वाक्य रचनात्मक रूप से) :)

अगर आपको इसमें कोई मदद चाहिए तो मुझे बताएं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL रूट पासवर्ड बदलें और रीसेट करें

  2. पीडीओ ने तैयार किया स्टेटमेंट फ़ेच () डबल परिणाम लौटा रहा है

  3. MySQL त्रुटि कोड:1175 MySQL कार्यक्षेत्र में अद्यतन के दौरान

  4. my.cnf में MySQL डिफॉल्ट कैरेक्टर सेट को UTF-8 में बदलें?

  5. मैक पर MySQL स्थापित करें