Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

tính toán Max Draw Down trong SQL

Dưới đây là phiên bản không hiệu quả nhưng rất đơn giản sử dụng chế độ xem:

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

Như thường lệ, bạn sẽ thực hiện phân tích trong khoảng thời gian cụ thể, sẽ rất hợp lý khi gói truy vấn trong một thủ tục được lưu trữ với các tham số @StartDate, @EndDate và có thể là @StockID . Một lần nữa, điều này khá kém hiệu quả theo thiết kế - O (N ^ 2), nhưng nếu bạn có chỉ số tốt và lượng dữ liệu không lớn, SQL Server sẽ xử lý nó khá tốt.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Toán tử OR Ngắn mạch trong SQL Server

  2. Tạo cơ sở dữ liệu, bảng, thủ tục bằng thủ tục / chức năng được lưu trữ?

  3. SQL Server Management Studio - cách thay đổi loại trường mà không làm rơi bảng

  4. Đối số thời gian chờ của pyodbc.connect bị bỏ qua đối với các cuộc gọi đến SQL Server

  5. Tạo SQL INSERT Script với các giá trị được thu thập từ bảng