我有这些表格:
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
谢谢
答案 0 :(得分:2)
我带着我使用的解决方案回来了 在我的应用程序中,我使用Symfony Framewok和Doctine Framework来处理数据库。
我不是DBAdmin,但我认为这个解决方案也可以通过数据库触发器来实现。在这种情况下,我选择了applicatif方法,因为我使用了Top-Down design。
需求背后的商业逻辑是试图获得商店输出报告(商品*每期价格),知道价格是固定在商品的输入时间。
我使用Entity Listener来监视商品价格的任何变化。每当有变化时,我都会记录(价格,数量,开始日期,结束日期) 生成报告后,我只需将期间与项目价格变化相匹配,然后将其与同一数据库条目中记录的数量相乘。
希望我能帮助别人。