2016-03-23 4 views
5

पर टाइमस्टैम्प समूहबद्ध करना मैं हर 30 मिनट में अपना टाइमस्टैम्प समूह करने की कोशिश कर रहा हूं।प्रत्येक 30 मिनट

2016-03-09 00:00:23 
2016-03-09 00:35:02 
2016-03-09 01:00:03 

क्वेरी है कि मैं उपयोग कर रहा हूँ इस

SELECT timestamp 
FROM a.tablename 
WHERE name = 'example' AND timestamp LIKE '2016-03-09%' 
GROUP BY ROUND(((60/30) * HOUR(timestamp) + FLOOR(MINUTE(timestamp)/30))); 

है:

2016-03-09 00:00:00 
2016-03-09 00:30:00 
2016-03-09 01:00:00 

इसके बजाय, अपने परिणाम इस प्रकार हैं:

मैं अपने परिणाम इस तरह बनना चाहता हूँ मैं अपने वांछित परिणाम कैसे प्राप्त कर सकता हूं? मैं इतने पर अन्य उत्तर गौर किया है और जवाब का गैर मदद की

उत्तर

5

यहाँ करने के लिए बुनियादी क्वेरी है 30 मिनट अंतराल से समूह।

SELECT 
FROM_UNIXTIME(ROUND(UNIX_TIMESTAMP(timestamp)/(30* 60)) * (30*60)) thirtyHourInterval 
FROM tablename 
GROUP BY ROUND(UNIX_TIMESTAMP(timestamp)/(30* 60)); 

नोट:ROUND() गलत उत्पादन की ओर ले सकता है। इसके बजाय निम्न क्वेरी का प्रयोग करें। निम्न उदाहरण को देखो:

SELECT ROUND(3.7), ROUND(4.2); 

परिणाम:4 4

दोनों एक ही सेगमेंट में स्थित हैं। एक ही ऊपर क्वेरी के लिए रखती है, जबकि अलग-अलग सेगमेंट की timestamp गोलाई एक ही खंड में गिर सकता है इस प्रकार गलत उत्पादन की दिशा में अग्रणी

[निम्न क्वेरी सिफारिश की है]

SELECT 
FROM_UNIXTIME((UNIX_TIMESTAMP(`timestamp`) DIV (30* 60)) * (30*60)) thirtyHourInterval 
FROM tablename 
GROUP BY UNIX_TIMESTAMP(`timestamp`) DIV (30* 60) 

SQL FIDDLE DEMO


वैकल्पिक रूप से आप निम्न क्वेरी को अपना सकते हैं।

SELECT 
FROM_UNIXTIME(ROUND(UNIX_TIMESTAMP(timestamp)/(30* 60)) * (30*60)) thirtyHourInterval 
FROM tablename 
GROUP BY (4 * HOUR(`timestamp`) + FLOOR(MINUTE(`timestamp`)/30)); 

Relatedpost

+0

हाँ यह सही है! दुर्भाग्य से, मुझे यह स्वीकार करने के लिए कुछ मिनट इंतजार है। धन्यवाद! – bmarkham

+0

कृपया संपादित पोस्ट की जांच करें। @bmarkham – 1000111

+1

हां मैंने आपकी अनुशंसित क्वेरी का उपयोग किया और मैं पुष्टि कर सकता हूं कि यह भी काम करता है – bmarkham

1

एक विधि, to_seconds() उपयोग करने के लिए मूल्य काटना, और फिर datetime मूल्य फिर से बनाने के है:

select date_add(0, interval floor(to_seconds(timestamp)/(30 * 60)) second) as timestamp 
from a.tablename 
where name = 'example' and timestamp >= '2016-03-09' and timestamp < '2016-03-10' 
group by date_add(0, interval floor(to_seconds(timestamp)/(30 * 60)) second) 
order by 1; 
+0

हालांकि अपने पूरे क्वेरी मेरे मामले में काम नहीं किया, अपने 'WHERE' खंड मुझे सिर्फ इतना है कि दिन में मदद मिली। तो +1 – bmarkham

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