Как рассчитать веса, пропорциональные определенному значению в Oracle SQL - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть таблица, которая выглядит следующим образом:

id | day | value
-----------------
1  | SUN |  10
1  | MON |  15
1  | TUE |  11
      .
      . 
      .
1  | SAT |  13
2  | SUN |  08
      .
      .
      .
2  | SAT | 22

Я хотел бы вычислить новую переменную с именем time_weight, которая является весом value, пропорциональной определенному дню.Формула для этого в языке программирования, таком как R или Python, будет выглядеть примерно так: ((value - value[day=='TUE']) / value[day=='TUE']) + 1), поэтому time_weight будет равно 1, когда day = 'TUE', и 1,36 для id = 1 & day = 'MON'.Мне любопытно узнать, как это сделать в Oracle.

РЕДАКТИРОВАТЬ:

Вот мой ожидаемый результат:

id | day | value | time_weight
-------------------------------
1  | SUN |  10   |    0.9090
1  | MON |  15   |    1.3636
1  | TUE |  11   |      1
      .
      . 
      .
1  | SAT |  13   |    1.1818 
2  | SUN |  08   |    0.4000
2  | MON |  10   |    0.5000
2  | TUE |  20   |    1.0000
      .
      .
      .
2  | SAT | 22    |    1.1000

1 Ответ

0 голосов
/ 25 сентября 2018

Вы можете сделать это с помощью оконных функций:

select id, day, value,
       value / max(case when day = 'TUE' then value end) over (partition by id) as time_weight
from t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...