У меня есть следующая улая таблица:улей, приказав линии, используя переменную задержку
product | price
A | 100
B | 102
C | 220
D | 240
E | 242
F | 410
Для каждой строки я хотел бы разделить более низкую цену по текущей цене, если результат больше, чем 0,9, я бы например, для увеличения номера строки. Если результат ниже 0,9, то номер строки должен быть 1 для этой строки, а текущая цена станет более низкой, а затем итерационной.
Результат должен выглядеть следующим образом:
product | price | row_number
A | 100 | 1
B | 102 | 2
C | 220 | 1
D | 240 | 2
E | 242 | 3
F | 410 | 1
Потому что:
lower price = 100: product A get 1 as row_number
100/102 >= 0.9: product B get 2 as row_number
100/220 < 0.9: product C get 1 as row_number, lower price = 220
220/240 >= 0.9: product D get 2 as row_number
220/242 >= 0.9: product E get 3 as row_number
220/410 < 0.9: product F get 1 as row_number, lower price = 410
Я думал о создании temporary_row_number просто упорядоченный по цене:
product | price | temp_row_number
A | 100 | 1
B | 102 | 2
C | 220 | 3
D | 240 | 4
E | 242 | 5
F | 410 | 6
А потом:
Select
product,
price,
case
when lag(price,temp_row_number-1,0)/price over() >= 0.9 then lag(price,temp_row_number-1,0)
else price
end as test
from my_table
Это извлечет:
product | price | test
A | 100 | 100
B | 102 | 100
C | 220 | 220
D | 240 | 240
E | 242 | 242
F | 410 | 410
Но в идеале я хотел бы получить
product | price | test
A | 100 | 100
B | 102 | 100
C | 220 | 220
D | 240 | 220
E | 242 | 220
F | 410 | 410
Так что я мог вычислить row_number строку с помощью row_number() порядок функции по продукции и цене и получить ожидаемый результат ,