SQL Условное увеличение и сброс - PullRequest
0 голосов
/ 06 февраля 2020

Мне нужно получить количество последовательных увеличений цены, а также процентное увеличение с начала серии, причем значения сбрасываются при каждом уменьшении.

У меня есть эта таблица:

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

1 Ответ

1 голос
/ 06 февраля 2020

Используйте 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;

Здесь - это скрипта db <>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...