sql >> データベース >  >> RDS >> Sqlserver

SQL で最大ドローダウンを計算する

    非常に非効率的ですが、ビューを使用した非常に単純なバージョンを以下に示します:

    WITH DDView
    AS (SELECT      pd_curr.StockID,
                    pd_curr.Date,
                    pd_curr.Low_Price  AS CurrPrice,
                    pd_prev.High_Price AS PrevPrice,
                    pd_curr.Low_Price / pd_prev.High_Price - 1.0 AS DD
    
        FROM        PriceData pd_curr
        INNER JOIN  PriceData pd_prev
                ON  pd_curr.StockID = pd_prev.StockID
                AND pd_curr.Date >= pd_prev.Date
                AND pd_curr.Low_Price <= pd_prev.High_Price
                AND pd_prev.Date >= '2001-12-31' -- @param: min_date of analyzed period
        WHERE       pd_curr.Date <= '2010-09-31' -- @param: max_date of analyzed period
    )
    SELECT      dd.StockID,
                MIN(COALESCE(dd.DD, 0)) AS MaxDrawDown
    FROM        DDView dd
    GROUP BY    dd.StockID
    

    通常は特定の期間で分析を実行するため、パラメータ @StartDate, @EndDate を使用してストアド プロシージャでクエリをラップすることは理にかなっています。 おそらく @StockID .繰り返しますが、これは設計上非常に非効率的です - O(N^2) ですが、適切なインデックスがあり、大量のデータがない場合、SQL Server はそれをうまく処理します。



    1. Hadoop上のSqoop:NoSuchMethodError:com.google.common.base.Stopwatch.createStarted()

    2. 5MicrosoftAccessのヒントとコツ

    3. データ ストレージではローカル パスのみがサポートされているため、filestream を使用して大量のデータを管理するにはどうすればよいですか?

    4. MySQLは、日付DESCで順序付けられた最後の行を毎日選択します