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

मनमाना समय अंतराल के लिए समुच्चय प्राप्त करें

15 मिनट के अंतराल के लिए, अपने उदाहरण के आधार पर निर्माण करें:

SELECT DISTINCT
     , date_trunc('hour', t) AS h
     , floor(EXTRACT(minute FROM t) / 15) AS m15
     , min(price) OVER w
     , max(price) OVER w
     , first_value(price) OVER w
     , last_value(price) OVER w
FROM   ticker
WINDOW w AS (PARTITION BY date_trunc('hour', t)
                        , floor(extract(minute FROM t) / 15));

5 मिनट के लिए भी काम करता है।

एक और सामान्य समाधान किसी भी नियमित समय अंतराल के लिए, किसी भी समयावधि में:

WITH x AS (
    SELECT t1, t1 + interval '5min' AS t2
    FROM   generate_series(timestamp '2012-07-18 00:00'
                         , timestamp '2012-07-18 23:55'
                         , interval '5 min') AS t1
    )
SELECT DISTINCT ON (1)
       x.t1
     , min(price)         OVER w
     , max(price)         OVER w
     , first_value(price) OVER w
     , last_value(price)  OVER w
FROM   x
JOIN   ticker y ON y.t >= x.t1  -- use LEFT JOIN to include empty intervals
               AND y.t <  x.t2  -- don't use BETWEEN
WINDOW w AS (PARTITION BY x.t1)
ORDER  BY x.t1;

अधिक स्पष्टीकरण के साथ संबंधित उत्तर:




  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. रेगुलर एक्सप्रेशन या LIKE पैटर्न के लिए एस्केप फंक्शन

  3. array_agg () के साथ फ़ंक्शन के लिए वापसी प्रकार

  4. रेल Postgresql एकाधिक स्कीमा और एक ही तालिका का नाम

  5. PHPpgAdmin:SQL का उपयोग किए बिना पंक्तियों को कैसे हटाएं