这里是我想找到所有与相同数量的订单数据的例子,忽略了订单ID列使用SQL DENSE_RANK确定重复
Product Location Customer OrderID Quantity
Eggs Chicago XYZ 2011 10
Eggs Chicago XYZ 2012 10
Eggs Chicago XYZ 2013 15
所以,我在SQL中使用DENSE_RANK函数
Select Product,Location,Customer,OrderID,Quantity,
Ranking = DENSE_RANK() OVER (PARTITION BY Product,Location,Customer,Quantity
ORDER BY OrderID ASC)
FROM MyTable
得到以下
Product Location Customer OrderID Quantity Ranking
Eggs Chicago XYZ 2011 10 1
Eggs Chicago XYZ 2012 10 2
Eggs Chicago XYZ 2013 15 1
所以数据的基础上,我西澳排名可以过滤不同orderID中具有相同数量的记录并将它们视为一个。 到目前为止,一切都很好,我很高兴。但是,另一个疯狂的要求是这种聚合形式应该只在第一次数量变化时完成。例如,如果上述数据恰好是这样一个低于
Product Location Customer OrderID Quantity
Eggs Chicago XYZ 2011 10
Eggs Chicago XYZ 2012 10
Eggs Chicago XYZ 2013 15
Eggs Chicago XYZ 2014 15
Eggs Chicago XYZ 2015 15
相同的SQL会产生导致
Product Location Customer OrderID Quantity Ranking
Eggs Chicago XYZ 2011 10 1
Eggs Chicago XYZ 2012 10 2
Eggs Chicago XYZ 2013 15 1
Eggs Chicago XYZ 2013 15 2
Eggs Chicago XYZ 2013 15 3
但是,我需要的结果是
Product Location Customer OrderID Quantity Ranking
Eggs Chicago XYZ 2011 10 1
Eggs Chicago XYZ 2012 10 2
Eggs Chicago XYZ 2013 15 1
Eggs Chicago XYZ 2013 15 1
Eggs Chicago XYZ 2013 15 1
请,请注意,在首次更改数量后,所有记录的排名仍为1。
是否可以调整我的SQL以获得上述行为?
感谢您的任何建议。
应该将订单确实是2013年在每一个你想要的数据的最后三排的?即使他们是你的样本数据中的2013年,2014年,2015年 – Tobsey
使用ROW_NUMBER而不是DENSE_RANK怎么样? –
ROW_NUMBER(),RANK()都给出相同的行为 – user320587