PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

Postgresql SQL GROUP BY समय अंतराल मनमाने ढंग से सटीकता के साथ (मिली सेकंड तक)

आप generate_series() द्वारा बनाए गए अंतरालों को जोड़कर "बाल्टी" की एक तालिका तैयार कर सकते हैं। यह SQL स्टेटमेंट पहले दिन के लिए पांच मिनट की बकेट की एक टेबल जेनरेट करेगा (min(measured_at) का मान) ) आपके डेटा में।

select 
  (select min(measured_at)::date from measurements) + ( n    || ' minutes')::interval start_time,
  (select min(measured_at)::date from measurements) + ((n+5) || ' minutes')::interval end_time
from generate_series(0, (24*60), 5) n

लपेटें कि एक सामान्य तालिका अभिव्यक्ति में बयान, और आप इसमें शामिल हो सकते हैं और उस पर समूह बना सकते हैं जैसे कि यह एक आधार तालिका थी।

with five_min_intervals as (
  select 
    (select min(measured_at)::date from measurements) + ( n    || ' minutes')::interval start_time,
    (select min(measured_at)::date from measurements) + ((n+5) || ' minutes')::interval end_time
  from generate_series(0, (24*60), 5) n
)
select f.start_time, f.end_time, avg(m.val) avg_val 
from measurements m
right join five_min_intervals f 
        on m.measured_at >= f.start_time and m.measured_at < f.end_time
group by f.start_time, f.end_time
order by f.start_time

सेकंड की मनमानी संख्या के आधार पर समूह बनाना समान है--उपयोग date_trunc()

Generate_series() के अधिक सामान्य उपयोग से आप पाँच मिनट की बकेट की ऊपरी सीमा का अनुमान लगाने से बच सकते हैं। व्यवहार में, आप शायद इसे एक दृश्य या फ़ंक्शन के रूप में बनाएंगे। आपको आधार तालिका से बेहतर प्रदर्शन मिल सकता है।

select 
  (select min(measured_at)::date from measurements) + ( n    || ' minutes')::interval start_time,
  (select min(measured_at)::date from measurements) + ((n+5) || ' minutes')::interval end_time
from generate_series(0, ((select max(measured_at)::date - min(measured_at)::date from measurements) + 1)*24*60, 5) n;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कोड कवरेज आँकड़े

  2. पोस्टग्रेएसक्यूएल 12:के-निकटतम पड़ोसी अंतरिक्ष विभाजन को लागू करना सामान्यीकृत खोज ट्री इंडेक्स

  3. बंडल विफल - PostgreSQL क्लाइंट लाइब्रेरी नहीं ढूँढ सकता (libpq)

  4. postgresql बिना अंतराल के अनुक्रम उत्पन्न करता है

  5. PostgreSQL कनेक्शन नोडज के लिए एसएसएल