通过价格变化获取销售商品的总价格和数量

时间:2015-01-20 22:59:13

标签: sql sql-server symfony doctrine-orm report

我有这些表格:

  • items(pk:id | Name)
  • priceChanges(pk:id | fk:item_id | price | fromDate | toDate)
  • request(pk:id | deliveryDate)
  • requested_category(pk:id | assigned_quantity | fk:item_id | fk:request_id)

PriceChanges表记录每件商品的价格变化 我希望两个日期之间的物品与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 个答案:

答案 0 :(得分:2)

我带着我使用的解决方案回来了 在我的应用程序中,我使用Symfony Framewok和Doctine Framework来处理数据库。

我不是DBAdmin,但我认为这个解决方案也可以通过数据库触发器来实现。在这种情况下,我选择了applicatif方法,因为我使用了Top-Down design

需求背后的商业逻辑是试图获得商店输出报告(商品*每期价格),知道价格是固定在商品的输入时间。

我使用Entity Listener来监视商品价格的任何变化。每当有变化时,我都会记录(价格,数量,开始日期,结束日期) 生成报告后,我只需将期间与项目价格变化相匹配,然后将其与同一数据库条目中记录的数量相乘。

希望我能帮助别人。

相关问题