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 で同じ数量を持つレコードを除外し、それらを 1 つとして扱うことができました。これまでのところ、すべてが順調で、満足しています。しかし、別のクレイジーな要件の 1 つは、この形式の集計は数量の最初の変更に対してのみ実行する必要があるということです。たとえば、上記のデータがたまたま下のような場合
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 を微調整することは可能ですか?
提案をありがとう。