投資ウェブサイトから最大ドローダウンの定義を入手しました(Google に感謝します!)。したがって、グラフの最高点とそれに続く最低点の間の低下率を計算する必要があると思います。
次のクエリは、過去 12 か月間の Oracle 株への投資の最大ドローダウンを計算します。investments
テーブルのバージョンを区別するためのエイリアスを使用して、テーブルをそれ自体に結合します (1 つは最高のピーク用、もう 1 つは最低の谷用)。これは正確なビジネス ロジックを反映していない可能性がありますが、オラクルが提供する SQL 手法を示しています。
select round(((max_return-min_return)/max_return)*100, 2) as max_drawdown
from
( select max(t1.return_amt) as max_return
, min(t2.return_amt) as min_return
from investments t1
join investments t2
on ( t1.stock_id = 'ORCL'
and t2.stock_id = t1.stock_id
and t2.created_date > t1.created_date )
where t1.created_date >= add_months(sysdate, -12)
and t2.created_date >= add_months(sysdate, -12)
)
/
このクエリは、ウィンドウ中に株価が下落しなかった場合、0 を返します。また、次の上昇をチェックしません (ドローダウンは谷の底であると考えられているため、株価が再び上昇し始めたときにのみ確立できるポイントです)。
自宅でのトレーニングに関しては、その目的のためにOracle TechNetからソフトウェアをダウンロードできます。帯域幅やディスク容量が問題になる場合は、Express Edition をお勧めします。すべての機能を備えているわけではありませんが、おそらくしばらくは必要ないでしょう。Oracle は無料の IDE であるSQL Developerを提供しています。その名前が示すように、主に開発者を対象としていますが、DB Artisan の DBA 指向の機能の多くを備えています。完全なデータベース管理のために、オラクルはEnterprise Managerを提供しています。
編集
コメントoutisが提案する
t1.return_amt >
t2.return_amt
マイナーな最適化として、結合にa を追加できます
インデックス化される可能性は低いとreturn_amt
思いますので、そのような句がパフォーマンスに影響を与える可能性は低いと思います。それが行うことは、ドローダウンのない株式の動作を変更することです。私が提示したクエリは、時間枠を通じて継続的に増加した株式に対してゼロを返します。このような場合、追加のフィルターは NULL を返します。どちらがより望ましい結果であるかは、好み (または要件仕様) の問題です。