Синтаксис SQL при использовании Row_Number для сортировки цены
Я сохранил свой синтаксис SQL в этом sqlfiddle.
http://sqlfiddle.com/#!6/80e00/8
WITH cte AS ( SELECT left(modelnumber,4) as ModelNumber, packetsize, price, row_number() over ( partition BY left(modelnumber,4),packetsize,price ORDER BY price ASC ) AS rownumber FROM test ) SELECT * FROM cte
Я пытаюсь сортировать цену modelnumbers в порядке возрастания.
Я не уверен, почему мой синтаксис не возвращает результат, как ожидалось.
Моя цель – выбрать самую низкую цену для Left (ModelNumber, 4). Для этого. Мне нужно условие WHERE. Например, select * from cte where rownumber = 1 order by price asc
. Но в настоящем выпуске мы получаем все рябины = 1
Ожидаемый результат
MODELNUMBER PACKETSIZE PRICE ROWNUMBER 1000 1.1 10.5 1 1000 1.1 11.5 2 1000 1.1 13 3 1000 1.1 15 4 1000 2.1 10.5 1
Оболочка раздела ROW_NUMBER указывает, когда вы хотите сбросить нумерацию на 1.
При разбиении по ModelNumber, Packetsize и Price вы выбираете почти разные значения для перезапуска нумерации.
Все, что вам действительно нужно сделать, это сбросить «цену» из раздела.
WITH cte AS ( SELECT left(modelnumber,4) as ModelNumber, packetsize, price, row_number() over ( partition BY left(modelnumber,4),packetsize ORDER BY price ASC ) AS rownumber FROM test ) SELECT * FROM cte
демонстрация