मैं उसी मुद्दे पर आया था।
मैंने पाया कि किसी भी मिनट के अंतराल से समूह बनाना आसान है, बस सेकंड की मात्रा में मिनटों द्वारा युग को विभाजित करना है और फिर शेष की सवारी प्राप्त करने के लिए या तो गोलाई या फर्श का उपयोग करना है। इसलिए यदि आप 5 मिनट में अंतराल प्राप्त करना चाहते हैं तो आप 300 सेकंड का उपयोग करेंगे ।
SELECT COUNT(*) cnt,
to_timestamp(floor((extract('epoch' from timestamp_column) / 300 )) * 300)
AT TIME ZONE 'UTC' as interval_alias
FROM TABLE_NAME GROUP BY interval_alias
interval_alias cnt
2010-11-16 10:30:00 2
2010-11-16 10:35:00 10
2010-11-16 10:45:00 8
2010-11-16 10:55:00 11
यह चयनित मिनट अंतराल द्वारा डेटा को सही ढंग से समूह में लौटाएगा; हालाँकि, यह उन अंतरालों को वापस नहीं करेगा जिनमें कोई डेटा नहीं है। उन खाली अंतरालों को प्राप्त करने के लिए हम फंक्शन जेनरेट_सरीज का उपयोग कर सकते हैं ।
SELECT generate_series(MIN(date_trunc('hour',timestamp_column)),
max(date_trunc('minute',timestamp_column)),'5m') as interval_alias FROM
TABLE_NAME
परिणाम:
interval_alias
2010-11-16 10:30:00
2010-11-16 10:35:00
2010-11-16 10:40:00
2010-11-16 10:45:00
2010-11-16 10:50:00
2010-11-16 10:55:00
अब शून्य घटनाओं के साथ परिणाम प्राप्त करने के लिए हम केवल बाहरी दोनों परिणाम सेट में शामिल होते हैं ।
SELECT series.minute as interval, coalesce(cnt.amnt,0) as count from
(
SELECT count(*) amnt,
to_timestamp(floor((extract('epoch' from timestamp_column) / 300 )) * 300)
AT TIME ZONE 'UTC' as interval_alias
from TABLE_NAME group by interval_alias
) cnt
RIGHT JOIN
(
SELECT generate_series(min(date_trunc('hour',timestamp_column)),
max(date_trunc('minute',timestamp_column)),'5m') as minute from TABLE_NAME
) series
on series.minute = cnt.interval_alias
अंतिम परिणाम में सभी 5 मिनट के अंतराल के साथ श्रृंखला शामिल होगी, यहां तक कि जिनके पास कोई मूल्य नहीं है।
interval count
2010-11-16 10:30:00 2
2010-11-16 10:35:00 10
2010-11-16 10:40:00 0
2010-11-16 10:45:00 8
2010-11-16 10:50:00 0
2010-11-16 10:55:00 11
अन्तराल को आसानी से Gener_series के अंतिम पैरामीटर को समायोजित करके बदला जा सकता है। हमारे मामले में हम '5 मी' का उपयोग करते हैं लेकिन यह कोई अंतराल हो सकता है जिसे हम चाहते हैं।