这是我试图查找具有相同数量的所有订单的数据示例,忽略 OrderID 列
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 以获得上述行为?
感谢您的任何建议。