2012-09-26 10 views
6

मेरे पास एक डेटाटाइम तालिका वाला एक MySQL तालिका है। मैं इसे रोकना चाहता हूं कि PHP-script को अधिक डेटा प्राप्त हो जाता है। इसलिए मैं एक समाधान की तलाश कर रहा हूं कि एक MySQL क्वेरी केवल उन पंक्तियों का चयन करती है जिनकी दूरी 1 मिनट या जो भी हो। क्या कुछ आसान है या मुझे हर बार एक नई mysql क्वेरी के साथ एक फॉर-लूप कोड करना है। पहले सेMySQL क्वेरी: विशिष्ट अंतराल में डेटा प्राप्त करें

Example 
timestamp 
2012-09-25 00:00:00--> 
2012-09-25 00:00:50 
2012-09-25 00:01:23 
2012-09-25 00:01:30--> 
2012-09-25 00:02:33 
2012-09-25 00:02:40 
2012-09-25 00:03:01-->i want those 

धन्यवाद

+2

मुझे मानदंडों को समझ में नहीं आता है, आप उन 3 क्यों चाहते हैं? – CrazyCasta

+0

आप हर कुछ पंक्तियों को चुनना चाहते हैं? सही? –

+0

यह सिर्फ एक उदाहरण है। मैं बस उस समय के सभी मूल्य नहीं चाहता 00:01:00 से 00:02:00, एक पर्याप्त है। मेरी वास्तविक तालिका में उदाहरण के लिए 1 मिनट के अंतराल में 10 मान हैं; डेटा की मात्रा को कम करने के लिए मैं सिर्फ एक मान चुनना चाहता हूं। शायद उच्चतम। – simmi91

उत्तर

0

WHERE timestamp LIKE '%:30:00%' आप हर 30 सेकंड मिल जाएगा ..

लेकिन यह केवल यदि आप वर्दी है entries..if अपने timestamps समान रूप से सभी अंत न काम करेंगे आप .. ' हमें हमें बताने की ज़रूरत होगी।

संपादित

मुझे लगता है कि आप इस के लिए देख जा सकता है: यह कैसे काम करता

How do you select every n-th row from mysql

+0

क्या होगा यदि कुछ अंतराल में 30 की तरह कुछ भी नहीं है? – nawfal

+0

कि समस्या है: पी – simmi91

+0

आह ... मैं देख रहा हूँ:/ –

1

इस

SET @time := '1000-01-01 00:00:00'; 
SET @interval := 60; 

SELECT colDate 
FROM table 
WHERE TIMESTAMPDIFF(SECOND, @time, colDate) >= @interval 
    AND @time := colDate 

की कोशिश करो।

@ अंतराल वर्तमान और पिछले कॉलडेट के बीच वांछित समय अंतर है। TIMESTAMPDIFF में पहला पैरामीटर अंतराल का उपयोग करने वाले समय की इकाई निर्धारित करता है। पूर्व: दूसरा, मिनट, घंटा, दिन, सप्ताह, माह, क्वार्टर, या वर्ष।

@टाइम पिछले कॉलडेट का ट्रैक रखता है, और इसकी तुलना वर्तमान पंक्ति से की जाती है। यदि पिछले और वर्तमान colDate के बीच का अंतर अंतराल के बराबर या उससे अधिक है, तो इसमें शामिल है। यह कैसे काम करता

SELECT create_time 
FROM timeTable 
WHERE create_time 
IN (

SELECT min(create_time) 
FROM timeTable 
GROUP BY FROM_UNIXTIME(UNIX_TIMESTAMP(create_time) - MOD(UNIX_TIMESTAMP(create_time) , 60)); 

:

+0

काम करेगा, मैं कोशिश करूँगा और जवाब दूंगा कि यह – simmi91

+0

काम करता है ... या आप ... :) –

1

इस प्रयास करें

i) समूह दिनांक द्वारा तालिका अंतराल के लिए गोल, 1 मिनट (60 सेकंड) यहाँ।

ii) प्रत्येक समूह से शीर्ष पंक्ति प्राप्त करता है।

यह आपके डेटा के लिए एक अच्छा नमूना मानदंड हो सकता है। इस क्वेरी को इन बिंदुओं पर बहुत अनुकूलित किया जा सकता है:

i) दिनांक के लिए एक क्लॉज = आवश्यक तिथि दें, और फिर पूरे समय के बजाय घंटे + मिनट पर अन्य ऑपरेशन करें।

ii) यदि आपका अंतराल 1 मिनट है, तो टाइमस्टैम्प या डेट_फॉर्मैट के सबस्ट्रिंग को इसे निकटतम मिनट तक बंद करने के लिए भी कोशिश की जा सकती है।

उदाहरण के लिए।

SELECT create_time 
FROM timeTable 
WHERE create_time 
IN (

SELECT min(create_time) 
FROM timeTable 
GROUP BY DATE_FORMAT(`create_time` , 'Y-M-D %H:%i') 
); 
संबंधित मुद्दे