我在这个sqlfiddle中保留了我的SQL语法。
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
我试图按升序排序模型数的价格。
我不确定,为什么我的语法没有按预期返回输出。
我的目标是为Left选择最低价格(ModelNumber,4)。为了做到这一点。我需要一个WHERE条件。例如select * from cte where rownumber = 1 order by price asc
。但是在目前的输出中,我们得到所有的rownumbers = 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
答案 0 :(得分:2)
ROW_NUMBER的分区子句表示您希望将编号重置为1。
通过按ModelNumber,Packetsize 和分区,您可以选择几乎不同的值来重新开始编号。
你真正需要做的就是放弃"价格"来自分区。
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