Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL中计算每日库存提取_Sql_Stocks - Fatal编程技术网

在SQL中计算每日库存提取

在SQL中计算每日库存提取,sql,stocks,Sql,Stocks,我有一张股票价格表,我想从中计算提款 Ticker Date price ABC 01/01/13 100.00 ABC 01/02/13 101.50 ABC 01/03/13 99.80 ABC 01/04/13 95.50 ABC 01/05/13 78.00 XYZ 01/01/13 11.50 XYZ 01

我有一张股票价格表,我想从中计算提款

Ticker       Date        price
ABC         01/01/13    100.00
ABC         01/02/13    101.50
ABC         01/03/13     99.80
ABC         01/04/13     95.50
ABC         01/05/13     78.00
XYZ         01/01/13     11.50
XYZ         01/02/13     12.10
XYZ         01/03/13     13.15
XYZ         01/04/13     14.10
XYZ         01/05/13     15.55
我将提款定义为截至该日期(含该日期)的最高价格减去当前价格除以最高价格的差额

以下是每日最高价格和每日支取的情况:

Ticker   Date       price      max   drawdown
ABC     01/01/13   100.00    100.00    0.0%
ABC     01/02/13   101.50    101.50    0.0%
ABC     01/03/13    99.80    101.50    1.7%
ABC     01/04/13    95.50    101.50    5.9%
ABC     01/05/13    78.00    101.50   23.2% 
XYZ     01/01/13    11.50     11.50    0.0%
XYZ     01/02/13    12.10     12.10    0.0%
XYZ     01/03/13    13.15     17.15    0.0%
XYZ     01/04/13    14.10     14.10   17.8%
XYZ     01/05/13    15.55     15.55    9.3%
我知道如何计算整个数据集的一个最大支取,但我正在努力完善适用于单个股票的最大支取,并将其作为每日支取

;WITH x AS
(  SELECT [drop] = ((s.price-e.price)/s.price) *100 
    FROM [temp] AS s
    INNER JOIN [temp] AS e
    ON s.[Date] < e.[Date]
    AND s.price > e.price
)
   SELECT [Largest Drawdown] = MAX([drop]) FROM x;

Largest Drawdown
87.900000000000000
此提取是计算整个数据集ABC的最大价格101.50,以及数据集XYZ=11.50的最低价格,以获得其最大提取87.9%


如何计算每种股票的每日提取额?

这听起来像一个窗口函数:

select t.*,
       max(t.price) over (partition by ticker order by date) as max_price,
       (t.price / max(t.price) over (partition by ticker order by date)) - 1 as ratio
from temp t;

这听起来像一个窗口函数:

select t.*,
       max(t.price) over (partition by ticker order by date) as max_price,
       (t.price / max(t.price) over (partition by ticker order by date)) - 1 as ratio
from temp t;

用你正在使用的数据库标记你的问题。用你正在使用的数据库标记你的问题。@Coding\u Newbie。当一个答案满足你的需要时,你应该考虑接受它。当一个答案满足你的需要时,你应该考虑接受它。