0

t12 つのテーブルでt2内部結合を作成してon t1.colum1>t2.colum2、リターン ベクターの最大ドローダウンを計算できるという事実を利用したいと考えています。問題は、内部結合が 2 つの格納されたデータベースまたはテーブルでのみ可能であり、テーブルの一部だけを選択して実行したかったことです。

他に可能性はありますか?私はSQLにまったく慣れていないので、他のオプションが見つかりませんか?

ありがとうございました

編集

内部結合を操作して最大ドローダウンを計算できるようにする前に、テーブル自体ではなく、テーブルの選択に対してこの内部結合を作成できる必要があります。マークのアドバイスに従いましたが、まだエラーが発生しています。これが私のクエリです:

select * 
from (select * from bars where rownum <= 10 as x)as tab1
inner join (select * from bars where rownum <= 10  as y) as tab2
on tab1.x=tab2.y

エラーは ora-00907 missing right parenthesis

  • この投稿への回答として公開された OP のメッセージから抽出された追加情報。*
4

3 に答える 3

7

副選択でも内部結合できます。副選択にエイリアスを与えるだけで済みます。

SELECT *
FROM (SELECT 1 AS X) AS T1
INNER JOIN (SELECT 1 AS Y) AS T2
ON T1.X = T2.Y

機能しないクエリを投稿すると、正確なテーブルに合わせてより適切な回答を提供できます。

于 2009-12-21T00:06:46.627 に答える
0

投資ウェブサイトから最大ドローダウンの定義を入手しました(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 を返します。どちらがより望ましい結果であるかは、好み (または要件仕様) の問題です。

于 2009-12-21T05:35:01.233 に答える
0

(内部) 結合はテーブル全体に限定されません。

于 2009-12-21T00:06:34.973 に答える