2016-05-19 14 views
0

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

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() порядок функции по продукции и цене и получить ожидаемый результат ,

ответ

0

С СТЕ КАК
(выбрать продукт, цена, (случай, когда цена от 100 до 200 затем 1 , когда цена от 200 до 300 затем 2 , когда цена между 300 и 400 затем 3 КОНЕЦ) КАК RN

  FROM #test) 

выбрать продукт, Цена, ROW_NUMBER() OVER (PARTITION BY RN ORDER BY RN) ОТ КТР ORDER BY продукта