SQL条件增量和重置

问题描述 投票:0回答:1

我需要获取价格连续上涨的次数,以及自系列开始以来的上涨百分比,并在遇到下跌时重置值。

我有这张桌子:

Date    Hour    Price   
2020-02-05  0   188.713 
2020-02-05  1   189.532 
2020-02-05  2   188.184 
2020-02-05  3   188.432 
2020-02-05  4   189.06  
2020-02-05  5   190.264 
2020-02-05  6   191.451 
2020-02-05  7   190.762 
2020-02-05  8   190.203

我需要将其转换为以下格式:

Date    Hour    Price   ConsecutiveIncreases    PercentageIncrease
2020-02-05  0   188.713         0                       0
2020-02-05  1   189.532         1                    0.432117
2020-02-05  2   188.184         0                       0
2020-02-05  3   188.432         1                    0.1316124
2020-02-05  4   189.06          2                    0.4633449
2020-02-05  5   190.264         3                    1.0932178
2020-02-05  6   191.451         4                    1.7064418
2020-02-05  7   190.762         0                       0
2020-02-05  8   190.203         0                       0
sql sql-server tsql
1个回答
0
投票

使用lag()确定减少的位置。然后进行累积分组。最后安排您想要的号码:

select t.*,
       (case when prev_price < price
             then row_number() over (partition by grp order by date, hour) - 1
             else 0
        end) as cumulative_increases,
       (case when prev_price < price
             then (max(price) over (partition by grp order by date, hour) * 1.0 /
                   min(price) over (partition by grp order by date, hour)
                  ) - 1
             else 0
        end) as cumulative_increases,
from (select t.*,
             sum(case when prev_price <= price then 0 else 1 end) over (order by date, hour) as grp
      from (select t.*,
                   lag(price) over (order by date, hour) as prev_price
            from t
           ) t
     ) t;

Here是db <>小提琴。

© www.soinside.com 2019 - 2024. All rights reserved.