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;
अधिक स्पष्टीकरण के साथ संबंधित उत्तर:
- Rails+Postgres में मनमाने समय अंतराल से रिकॉर्ड गिनने का सबसे अच्छा तरीका
- पहले चुनें प्रत्येक ग्रुप बाय ग्रुप में पंक्ति?