Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

menghitung Max Draw Down dalam SQL

Sangat tidak efisien, tetapi versi yang sangat sederhana menggunakan tampilan di bawah ini:

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

Seperti biasanya Anda akan melakukan analisis pada periode waktu tertentu, masuk akal untuk membungkus kueri dalam prosedur tersimpan dengan parameter @StartDate, @EndDate dan mungkin @StockID . Sekali lagi, ini cukup tidak efisien menurut desain - O(N^2), tetapi jika Anda memiliki indeks yang bagus dan jumlah data yang tidak besar, SQL Server akan menanganinya dengan cukup baik.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Solusi Ekspresi Reguler SQL Server di T-SQL?

  2. Urutan pemasangan/pencopotan VS 2008 dan SQL Server 2008

  3. Bagaimana menemukan kueri berkinerja terburuk di SQL Server 2008?

  4. Log Transaksi SQL Server, Bagian 1:Dasar-dasar Pencatatan

  5. Bisakah Count(*) mengembalikan nol?