我有看起來像這樣的數據。SQL查找n行的平均值,其中n是字段的總和
SoldToRetailer
OrderDate | Customer | Product | price | units
-------------------------------------------------
1-jun-2011 | customer1 | Product1 | $10 | 5
2-jun-2011 | customer1 | Product1 | $5 | 3
3-jun-2011 | customer1 | Product2 | $10 | 4
4-jun-2011 | customer1 | Product1 | $4 | 4
5-jun-2011 | customer2 | Product3 | $10 | 1
SalesByRetailers
Customer | Product | units
-----------------------------
customer1 | Product1 | 5
customer2 | Product3 | 1
這是我所需要的。
銷售(平均價格)
Customer | Product | units | Average Price
--------------------------------------------
customer1 | Product1 | 5 | $3.44
customer2 | Product3 | 1 | $10
平均價格被定義爲平均價格最近SoldToRetailer價格加起來的單位。
因此,在第一種情況下,我從6月4日和6月2日獲取訂單。我不需要(實際上需要)從6月1日起的訂單被包括在內。
編輯:希望更好的解釋。
我試圖確定一個項目被賣給零售商的正確(最近的)價格。這是價格的LIFO訂單。價格是通過平均最近n次訂單的價格來確定的。其中n =特定產品和客戶的零售總額。
在SQL僞代碼看起來像這樣。
Select s1.Customer, s1.product, average(s2.price)
from SalesByRetailers s1
join SoldToRetailer s2
on s1.customer=s2.customer
and s1.product=s2.product
and (select top (count of records where s2.units = s1.units) from s2 order by OrderDate desc)
我需要返回的是來自SoldToRetailer的記錄數量,其中單位總和> = SalesByRetailer單位。
它看起來可以通過RANK或rowover分區來解決,但我很茫然。
SoldToRetailer表格是巨大的,所以性能是非常寶貴的。
運行在SQL 2008R2 感謝您的幫助
「product1總訂單爲9」從哪裏來?單位賣出,單位庫存?什麼是期望的輸出?爲什麼沒有2011年1月1日的product1數據?這不是太清楚... – gbn
編輯以提高清晰度。 9是單位總價和單位庫存。期望的產出是客戶,產品,平均價格。詳細信息記錄日期,因此只返回最近的記錄。 –
你如何達到平均價格3.44?爲什麼你有客戶和訂單的單位? –