私は約百万行との以下のpostgresテーブルを持っています。Postgres - 単一の大きなテーブルでのデータ操作
id |基礎| option_symbol | option_type | expiration_date |ストライク|ミッド|
私は数秒の下で、次を実行する必要があります。
- 『2017年12月1日』
- がoption_typeですべての行を取得option_type =」foo」とEXPIRATION_DATE>ですべての行を取得します。 = "bar"とexpiration_date> "2017-12-01"
- クエリ#1の各行について、同じ基礎とexpiration_dateを持つクエリ#2の結果行をループオーバーし、ストライク#1とストライク#2。
- 計算された「スプレッド」のこの結果リストをソートし、各シンボルに対して最良の結果を得ます。
は、どのように私は以下の例では、 "クエリの" 計算(spread_profit、spread_distance、spread_max_loss、spread_profit_ratio)を行うのですか?
例:
SELECT a.underlying,
a.expiration_date,
(a.strike - b.strike) as spread_profit,
(a.mid - b.mid) as spread_distance,
(spread_distance - spread_profit) as spread_max_loss,
(spread_profit/spread_max_loss) as spread_profit_ratio
FROM option_data a
JOIN option_data b ON a.underlying = b.underlying AND a.expiration_date = b.expiration_date
WHERE a.option_type = 'foo'
AND b.option_type = 'bar'
AND a.expiration_date <= '2017-12-01'
AND b.expiration_date <= '2017-12-01'
GROUP BY a.underlying, a.expiration_date
ORDER BY spread_profit_ratio DESC
その可能で行うにはSQL。 –