python : mysql : Return 0 when no rows found -
तालिका संरचना - डेटा 5 मिनट के लिए मौजूद है स्लॉट्स -
data_point | बिंदु_डेट
12 | 00:00
14 | 00:05
23 | 00:10
10 | 00:15
43 | 00:25
10 | 00:40
जब मैं क्वेरी के लिए 30 मिनट कहता हूं और यदि डेटा मौजूद है तो मुझे 6 पंक्तियां मिलेंगी (प्रत्येक 5 मिनट की स्टैम्प के लिए एक पंक्ति)। साधारण प्रश्न -
select_note_there_to_table से, जहां point_date & gt; = start_date
और point_date & lt; Dot_date
द्वारा आदेश के लिए अब जब मेरे पास एक विशेष समय स्लॉट के लिए प्रविष्टि नहीं है (उदाहरण के लिए समय का स्थान <कोड> 00:20 है लापता), मैं "डेटा_पॉइंट" को 0
REPLACE , IF , IFNULL >
मैंने सोचा था कि एक डिफ़ॉल्ट मान के साथ संघ काम करेगा, लेकिन यह असफल हो गया है या शायद मैंने इसका इस्तेमाल नहीं किया है
नोट: पायथन 2.6 & amp; amp; Mysql संस्करण 5.1
जी हाँ, आप केवल एसक्यूएल का उपयोग करते हुए ऐसा कर सकते हैं एक समाधान एक संग्रहित रूटीन का उपयोग करने के लिए होगा। संभाल संग्रहित प्रक्रिया निम्न आउटपुट का उत्पादन करती है:
प्रारंभ करें cnt 00:05:00 1 00:10:00 0 00:15:00 1 00:20:00 0 00:25:00 1 00:30:00 0 00:35:00 1 00:40:00 0 00:45:00 0 00:50:00 0 00:55:00 2
तालिका मैंने उपयोग किया है:
बनाओ टेबल 'टाइम-एडेटा' (`आईडी` इंट (11) नल एटऑन्ग्रेमेंट,` सी 1` डेडेटटाइम डिफॉल्ट नल, `सी 2` varchar (20) डिफ़ॉल्ट नल, प्राथमिक कुंजी (`आईडी`))
यहां संचयित प्रक्रिया (अपने परिवेश के लिए समायोजित करें):
ड्रॉप प्रक्रिया अगर per5min मौजूद है; DELIMITER // निर्माण प्रक्रिया per5min () शुरू करें डीटीएमिन DATETIME DECLARE; DECLARE dtMax DATETIME; डिस्लेर डीटीस्टार्ट DATETIME; DECLARE dtStop DATETIME; DECLARE tmDiff TIME; DECLARE परिणाम INT UNAIGNED; SET @offset = 5 * 60; समय-समय पर DTMin में चुनें मिन (सी 1); समय-सीमा से डीटीएमएक्स में अधिकतम MAX (सी 1) चुनें; अस्थायी तालिका टीएमपी_पर 5 मिनट बनाएं (प्रारंभ समय, सीएनटी INT अनइंन्डेड); SET dtStart = dtMin; दोहराएं चुनें dtStart + INTERVAL @ ऑफसेट डीएसटीटॉप में दूसरा; चयन संख्या (सी 2) के परिणामस्वरूप समयबद्धता से WHERE C1 के बीच dtStart और dtStop; का चयन करें समय (शनिवार (dtStop, समय (dtMin))) tmDiff में; Tmp_per5min में शुरू करें (प्रारंभ, सीएनटी) मूल्य (टीएमडीआईएफ, परिणाम); SET dtStart = dtStop; जब dtStop> gt; = dtMax अंत दोहराना; SELECT * FROM tmp_per5min; ड्रॉप तालिका tmp_per5min; समाप्त; // DELIMITER; कॉल प्रति 5min ();
यदि आप 'per5minproc.sql' नामक एक फ़ाइल में ऊपर सहेजते हैं, तो आप इसे इस तरह लोड कर सकते हैं:
shell & gt; आईएसएसएल -रुट परीक्षण & lt; Per5minproc.sql
MySQLdb का उपयोग कर पायथन में (मैं यह MySQL कनेक्टर / पायथन में काम नहीं कर पाया, मुझे शर्मिन्दा!):
MySQLdb को एम के रूप में आयात करें यदि __name__ == '__main__': db = m.connect (उपयोगकर्ता = 'root', db = 'test') c = db.cursor () c.callproc ("per5min") प्रिंट (C.fetchall ()) c.close () db.close ()
कार्यों के ऊपर समाधान, लेकिन शायद कुछ tweaking की आवश्यकता होगी, उदा। DtStart एसपी के लिए एक तर्क हो सकता है और, यह वास्तव में सभी एसक्यूएल है!
Comments
Post a Comment