我正在尝试查询 PostgreSQL 8.4.2 服务器中的表以获取打开-高-低-关闭数据。该表和我的第一个查询如下。
问题: 有没有一种方法可以在不使用子查询的情况下获得相同的结果,如下面的示例查询?也许使用 FIRST_VALUE() 或 LAST_VALUE() 窗口方法?
-- FIRST ATTEMPT AT OHLC
SELECT
contract_id
, TO_CHAR(ts, 'YYMMDDHH24MI')
, (SELECT price FROM fill minF WHERE minF.fill_id = MIN(f.fill_id)) AS open
, MAX(f.price) AS high
, MIN(f.price) AS low
, (SELECT price FROM fill maxF WHERE maxF.fill_id = MAX(f.fill_id)) AS close
FROM fill f
GROUP BY 1,2
ORDER BY 1,2;
-- SIMPLIFIED DDL
CREATE TABLE fill
(
contract_id SEQUENCE PRIMARY KEY
, ts TIMESTAMP
, price NUMERIC(10,4)
);