2009-02-02 10 views
9

मेरे पास एक सारणी है जिसमें हर मिनट दर्ज डेटा होता है, इसलिए मेरे पास प्रत्येक मिनट के लिए एक पंक्ति होती है। प्रसंस्करण के लिए डेटा लौटने पर, पिछले 6 घंटों के लिए यह सटीकता आवश्यक है लेकिन इसके बाद, निम्न स्तर की सटीकता पर्याप्त है, उदा। हर 5 मिनट।मैं MySQL में प्रत्येक एन पंक्ति कैसे प्राप्त कर सकता हूं?

मैं सभी डेटा को एक सरणी में वापस कर सकता हूं और फिर सभी 5 वें तत्व को हटा सकता हूं लेकिन इसके लिए सभी डेटा को MySQL द्वारा लौटाया जाना चाहिए और फिर पहले सरणी में पढ़ना आवश्यक है - काफी सारे डेटा।

मैं MySQL में प्रत्येक एनटी पंक्ति कैसे वापस कर सकता हूं? मैं this ब्लॉग पोस्ट जो PrimaryKey% का उपयोग करने का सुझाव पढ़ा है 5 = 0 जहां PrimaryKey auto_increment है, लेकिन यह

क) अनुक्रमित का उपयोग नहीं करता ख) केवल PrimaryKey मूल्यों जो 5 से और विलोपन के मामले में विभाज्य हैं वापस आ जाएगी , वास्तव में प्रत्येक 5 वीं पंक्ति

क्या यह केवल SQL क्वेरी के भीतर किया जा सकता है या क्या इसे कर्सर का उपयोग करके परिणाम सेट के माध्यम से पंक्ति से लूपिंग पंक्ति की आवश्यकता होगी?

मैं डीबी से कनेक्ट करने के लिए PHP में MySQLi का उपयोग कर रहा हूं।

उत्तर

3

टाइम स्टांप की सूची हर 5 मिनट में काम कर सकते हैं:

SELECT 
    MIN(logtimestamp) AS first_of_five_minutes 
FROM tLog 
GROUP BY 
    DATE(logtimestamp), 
    HOUR(logtimestamp), 
    MINUTE(logtimestamp) - (MINUTE(logtimestamp) % 5) 

अब, आप से अनुरोध किया लॉग प्रविष्टियों प्राप्त करने के लिए एक उप-चयन के रूप में इसका उपयोग कर सकते logtimestamps से first_of_five_minutes पर शामिल हो रहा है। बेशक, अतिरिक्त WHERE -clauses को अंदर और बाहर दोहराना होगा ताकि आपको "दाएं" टाइमस्टैम्प मिलें।

साथ ही, ध्यान दें कि यह प्रत्येक पांच मिनट के अंतराल में पहला टाइमस्टैम्प देता है, वेरास समाधान सीधे minutes%5 = 0 का उपयोग करते हुए केवल लौटने वाले लॉगेंट्री जो वास्तव में 05: के गुणकों पर हैं, जो विफल हो सकते हैं यदि आपको लॉग या इसी तरह के रिकॉर्डिंग में देरी हो।

+0

के बिना देता है जो काम नहीं कर रहा था - यह सिर्फ सभी पंक्तियों को सूचीबद्ध करता है। हालांकि, मैंने इसे अनुकूलित किया यह, जो काम करता है - तालिका से चुनें logtimestamp तालिका से जहां MINUTE (logtimestamp)% 5 = 0 नोट मैं समय मान को यूनिक्स टाइमस्टैम्प के रूप में संग्रहीत करता हूं ताकि FROM_UNIXTIME का उपयोग करने के लिए भी आवश्यक हो। – DavidM

+0

मैंने आपकी टिप्पणी के कुछ हिस्सों को एकीकृत किया। –

0

पूरी तरह से अपरीक्षित लेकिन इस

SELECT Row, col_a 
FROM (SELECT @row := @row + 1 AS Row, col1 AS col_a FROM table1) As derived1 
WHERE Row%5 = 0; 
+0

कुछ भी वापस नहीं करता है। – DavidM

+0

क्या यह खंड के बिना कुछ भी लौटाता है? क्षमा करें, लेकिन इस समय मेरे पास mysql तक कोई पहुंच नहीं है, इसलिए इसे मेरे अंत में परीक्षण नहीं किया जा सकता है :( – Learning

+0

यह हर पंक्ति को WHERE – DavidM

संबंधित मुद्दे

 संबंधित मुद्दे