我有两张桌子,
表1(销售)有字段
saleDate,productID,sellPrice,costPrice, margin
表2(logSales)包含字段
dateModified, sellPrice,costPrice and margin
当输入销售时,数据被发布到表1和表1中。 2 如果修改了任何值,则会将新值过帐到表1中的受影响字段,并将一组新值(dateCreated,productID,sellPrice,costPrice和margin)过帐到表2。
我想要实现的是生成dateRanged报告,该报告根据在指定日期范围内创建或修改原始销售的每件产品的保证金返回实际生产率,例如,
table 1
saleDate productID sellPrice costPrice margin
2018-03-15 A1 1000.00 850.00 150.00
2018-05-02 A2 2000.00 1800.00 200.00
table 2
dateModified productID sellPrice costPrice margin variance
2018-03-15 A1 1000.00 850.00 150.00 0.00
2018-05-02 A2 2000.00 1800.00 200.00 0.00
2018-05-05 A1 1000.00 910.00 90.00 -60.00
如果我们运行三月份的生产力报告,结果将是150.00但是,运行5月份的报告需要显示5月份销售的200.00,对于5月份修改的5月销售量为60.00,所以May的实际生产率会是140.00,方差为-60.00这个让我完全难过。
答案 0 :(得分:0)
为了给您一个准确的答案,我需要对价格变动的原因和报告目标进行更多解释。
尽管如此,根据您对问题的描述,我会从以下角度对其进行攻击:
1-在月内添加表1中的销售额并从表2中添加月份的总差异:
SELECT SUM(data.performanceData) AS perfomance
FROM (
SELECT SUM(margin) AS performanceData
FROM table1
WHERE saleDate BETWEEN '2018-05-01' AND '2018-05-30'
UNION ALL
SELECT SUM(variance) AS performanceData
FROM table2
WHERE dateModified BETWEEN '2018-05-01' AND '2018-05-30'
) data
OR
2-从表2中假设如果方差= 0,那么它是一个新的销售;否则,求和方差:
SELECT SUM(IF(variance = 0, margin, variance)) AS performance
FROM table2
WHERE dateModified BETWEEN '2018-05-01' AND '2018-05-30'
这两个查询将在3月份恢复150的表现,在5月份恢复140.
按月分组:
SELECT data.monthID, SUM(data.performanceData) AS perfomance
FROM (
SELECT DATE_FORMAT(saleDate, "%Y-%m") AS monthID, SUM(margin) AS performanceData
FROM table1
GROUP BY DATE_FORMAT(saleDate, "%Y-%m")
UNION ALL
SELECT DATE_FORMAT(dateModified, "%Y-%m") AS monthID, SUM(variance) AS performanceData
FROM table2
GROUP BY DATE_FORMAT(dateModified, "%Y-%m")
) data
GROUP BY monthID
OR
SELECT DATE_FORMAT(dateModified, "%Y-%m") AS monthID, SUM(IF(variance = 0, margin, variance)) AS performance
FROM table2
GROUP BY DATE_FORMAT(dateModified, "%Y-%m")