使用Row_Number进行价格排序的SQL语法

时间:2014-04-07 04:09:23

标签: sql sql-server sql-server-2008

我在这个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

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

demo