open-high-low-close データを取得するために、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)
);