2015-01-20 59 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,它可以监视物品价格的任何变化。每当发生变化时,我会记录(价格,数量,开始日期,结束日期)
并且当生成报告时,我只需将期间与物料价格变化进行匹配,然后将其乘以记录的数量数据库条目。

希望我帮了某人。