2015-01-20 64 views
1

我有這些表:獲得總價格和物品的數量與價格出售變化

  • 項目(PK:ID |名稱)
  • priceChanges(PK:ID | FK:ITEM_ID |價格| FROM日期| TODATE)
  • 請求(PK:ID | deliveryDate)
  • requested_category(PK:ID | assigned_quantity | FK:ITEM_ID | FK:REQUEST_ID)

的PriceChanges表保持TR每個項目的價格變化的確認。
我想要將兩個日期之間銷售的物品與ech物品的總收入(價格*數量)進行比較,而數量是該期間以相同價格銷售的物品的總計數(沒有物品的價格變化) 。
這意味着,只要價格變化我得到一個新的行與新的價格出售的項目總數。
這裏是期望輸出的爲例:

 
id  Name  sold price  total 
------ ------- ----- ------ ------ 
8P01 51645A 3  1,20  3,60 
8P01 51645A 1  2,82  2,82 
8P01 51645A 5  2,50  12,50 

我已經試過SQL命令,但我不能停止獲取太多的重複列:

SELECT 
i.id, 
i.name, 
sum(rc.assigned_quantity) AS assigned_quantity, 
pc.price, 
pc.price * sum(rc.assigned_quantity) as total 
FROM requested_category rc 
LEFT JOIN items i ON rc.item_id = i.id 
LEFT JOIN request r ON rc.request_id = r.id 
LEFT JOIN priceChanges pc ON pc.item_id = i.id 
WHERE 
r.delivery_date BETWEEN 'startDate' AND 'endDate' 
GROUP BY i.id, i.name, pc.price 

我得到的結果是:

 
id  Name  sold price  total 
------ ------- ----- ------ ------ 
8P01 51645A 3  1,20  3,60 
8P01 51645A 1  1,20  1,20 
8P01 51645A 5  1,20  6,00 
8P01 51645A 3  2,82  7,86 
8P01 51645A 1  2,82  2,82 
8P01 51645A 5  2,82  12,10 
8P01 51645A 3  2,50  7,50 
8P01 51645A 1  2,50  2,50 
8P01 51645A 5  2,50  12,50 

我試圖在後續查詢以下意見要求:

SELECT i.id, i.name, rc.assigned_quantity, pc.price 
FROM requested_category rc 
LEFT JOIN items i ON rc.item_id = i.id 
LEFT JOIN request r ON rc.request_id = r.id 
LEFT JOIN priceChanges pc ON pc.item_id = i.id 
WHERE r.delivery_date BETWEEN 'startDate' AND 'endDate' 

我得到這樣的結果:

 
id  name assigned_quantity price 
8P01 51645A 1     1.20 
8P01 51645A 1     2.82 
8P01 51645A 1     2.50 
8P01 51645A 3     1.20 
8P01 51645A 3     2.82 
8P01 51645A 3     2.50 
8P01 51645A 5     1.20 
8P01 51645A 5     2.82 
8P01 51645A 5     2.50 

謝謝

+1

你可以發表你的查詢返回pls的樣本嗎? – 2015-01-20 23:04:34

+1

請指出(添加到您的文章)您的主鍵和外鍵。 – 2015-01-20 23:04:37

+0

你有沒有嘗試刪除左連接,只是做標準連接? – 2015-01-21 00:01:21

回答

2

我回來跟我所用的解決方案。
在我的應用程序中,我使用Symfony Framewok和Doctine Framework來處理數據庫。

我不是DBAdmin,但我認爲這個解決方案也可以通過數據庫觸發器來實現。在這種情況下,我選擇了應用方法,因爲我使用了Top-Down design

需求背後的業務邏輯是試圖獲知商店輸出報告(每期的商品*價格),因爲知道價格是固定在商品的輸入時間。

我使用了Entity Listener,它可以監視物品價格的任何變化。每當發生變化時,我會記錄(價格,數量,開始日期,結束日期)
並且當生成報告時,我只需將期間與物料價格變化進行匹配,然後將其乘以記錄的數量數據庫條目。

希望我幫了某人。

相關問題