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

15 मिनट की विंडो के लिए डेटा चुनें - PostgreSQL

त्वरित और गंदा तरीका:http://sqlfiddle.com/#!1/bd2f6/21 मैंने अपने कॉलम का नाम tstamp . रखा है आपके timestamp . के बजाय

with t as (
  select
    generate_series(mitstamp,matstamp,'15 minutes') as int,
    duration
  from
    (select min(tstamp) mitstamp, max(tstamp) as matstamp from tmp) a,
    (select duration from tmp group by duration) b
)

select
  int as timestampwindowstart,
  t.duration,
  count(tmp.duration)
from
   t
   left join tmp on 
         (tmp.tstamp >= t.int and 
          tmp.tstamp < (t.int + interval '15 minutes') and 
          t.duration = tmp.duration)
group by
  int,
  t.duration
order by
  int,
  t.duration

संक्षिप्त विवरण:

  1. न्यूनतम और अधिकतम टाइमस्टैम्प की गणना करें
  2. न्यूनतम और अधिकतम के बीच 15 मिनट का अंतराल उत्पन्न करें
  3. अवधि के अद्वितीय मान वाले क्रॉस जॉइन परिणाम
  4. बाएं मूल डेटा में शामिल हों (बाएं शामिल होना महत्वपूर्ण है, क्योंकि यह आउटपुट में सभी संभव संयोजन रखेगा और null होगा। जहां अवधि दिए गए अंतराल के लिए मौजूद नहीं है।
  5. कुल डेटा। count(null)=0

यदि आपके पास अधिक टेबल हैं और उनके संघ पर एल्गोरिदम लागू किया जाना चाहिए। मान लीजिए हमारे पास तीन टेबल हैं tmp1, tmp2, tmp3 सभी कॉलम के साथ tstamp और duration . हम पिछले समाधान का विस्तार कर सकते हैं:

with 

tmpout as (
  select * from tmp1 union all
  select * from tmp2 union all
  select * from tmp3
)

,t as (
  select
    generate_series(mitstamp,matstamp,'15 minutes') as int,
    duration
  from
    (select min(tstamp) mitstamp, max(tstamp) as matstamp from tmpout) a,
    (select duration from tmpout group by duration) b
)

select
  int as timestampwindowstart,
  t.duration,
  count(tmp.duration)
from
   t
   left join tmpout on 
         (tmp.tstamp >= t.int and 
          tmp.tstamp < (t.int + interval '15 minutes') and 
          t.duration = tmp.duration)
group by
  int,
  t.duration
order by
  int,
  t.duration

आपको वास्तव में with के बारे में पता होना चाहिए PostgreSQL में खंड। PostgreSQL में किसी भी डेटा विश्लेषण के लिए यह अमूल्य अवधारणा है।




  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. मैं STDIN से Postgresql में पंक्तियों को कैसे आयात करूं?

  3. Microsoft Azure पर PostgreSQL के लिए फ़ेलओवर और फ़ेलबैक

  4. Postgresql:एक अलग क्लाइंट में 10x धीमी क्वेरी करें

  5. Django 1.8 पोस्टग्रेज BDR 9.4.1 . के साथ माइग्रेशन