मेरे पास एक मेज है:
- location_id (
स्थान) - 0-90,000 से लेकर - समय (
time_period) - प्रत्येक स्थान के लिए 1-15 से लेकर - तापमान (
temp ) - प्रत्येक स्थान के लिए एक अनन्य मान x टाइम_परियोड।उदाहरण डेटा:
स्थान का समय_प्रारंभ टेंप 91 1 -4 91 2 3 91 3 12 ........................................... 91 15 20मैं
cum_tempनामक एक नया क्षेत्र बनाना चाहूंगा और प्रत्येक सेल के लिए संचयी मान उस समय तक चालू कर दूँगा - मेरी वर्तमान सोच तालिका का डुप्लिकेट करना है और रन:अद्यतन site_a सेट cum_temp = (site_a_copy से sum (temp) का चयन करें जहां site_a_copy.location = site_a.location और site_a_copy.time_period & lt; = site_a.time_period);क्या यह ऐसा करने का सबसे कारगर तरीका है या आप कुछ बेहतर सुझाव दे सकते हैं?
ध्यान दें कि आपको एक अलग तालिका की आवश्यकता नहीं है, जब तक कि आप उनमें से एक में संचयी तापमान को संग्रहित नहीं करना चाहते।
एक क्वेरी को समय-समय पर चलाना या मैन्युअल रूप से कार्य करना होगा (हालांकि इसे एक से करें), या आप इसे स्वचालित रूप से करने के लिए उपयोग करने का प्रयास कर सकते हैं:
प्रत्येक पंक्ति के लिए साइट पर INR से पहले ट्रागर sum_temp बनाएं NEWCum_temp = NEW.temp + (SELECT SUM (Temp) साइट से WHERE site.location_id = NEW.location_id और साइट। `टाइम` & lt; NEW.`time`); हालांकि, इस एप्लिकेशन के लिए ट्रिगर खतरे से भरा है। एक के लिए, उपरोक्त किसी भी पंक्तियों को अपडेट नहीं किया जाएगा जो नई पंक्ति के बाद अस्थायी रूप से हैं जब तक आप केवल नए रिकॉर्ड जोड़ते हैं, यह एक गंभीर समस्या नहीं है। बाद की पंक्तियों को अपडेट करने के लिए ट्रिगर लेना मूल रूप से असंभव है, क्योंकि पंक्ति स्तर के लॉक आपको INSERT और UPDATE ट्रिगर के भीतर एक ही तालिका में अपडेट करने से रोकते हैं। किसी अन्य तालिका में संचयी तापमान को संग्रहीत करना इस के आसपास होगा।
दूसरा, जब एक सिंगल INSERT कथन के साथ एकाधिक मान डालने, नई पंक्तियां विवरण में अस्थायी क्रम में होनी चाहिए, अन्यथा संचयी तापमान अनुचित तरीके से सेट किया जाएगा पंक्तियों जो पहले समय में थीं लेकिन बाद में आईएनएसईआरटी में बाद में पंक्तियों के संचयी तापमान की गणना करते समय लेकिन पहले आईएनएसईआरटी में ध्यान नहीं दिया जाएगा। यह पहली समस्या का एक परिणाम है।
आप भी एक दृश्य का उपयोग कर सकते हैं:
सब्सक्राइव बनाओ site_a as select *, SUM (temp) AS cum_temp as साइट से AS एस.एल स्थान_आईडी = टी.लोकेशन_आईड और एस.टाइम_परियोड & gt; = टी। टाइम_पिरोड; "
Comments
Post a Comment