首页 > 解决方案 > 如何获得销售生产力

问题描述

我有两张桌子,

表 1(销售)有字段

saleDate,productID,sellPrice,costPrice, margin 

表 2 (logSales) 有字段

dateModified, sellPrice,costPrice and margin 

输入销售时,数据将发布到表 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

使用该示例,如果我们运行 3 月的生产力报告,结果将为 150.00,但是,运行 5 月的报告需要显示 200.00 用于 5 月销售 LESS 60.00 用于 5 月修改的 3 月销售,因此 5 月的实际生产力将为 140.00 -60.00 的方差让我完全难过。

标签: phpmysql

解决方案


为了给你一个准确的答案,我需要对价格变化的原因和报告的目标做更多的解释。

尽管如此,根据您对问题的描述,我将从以下角度进行攻击:

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

或者

2- 从表 2 假设如果方差 = 0,那么它是一个新的销售;否则,求和方差:

SELECT SUM(IF(variance = 0, margin, variance)) AS performance
FROM table2
WHERE dateModified BETWEEN '2018-05-01' AND '2018-05-30' 

这两个查询将返回 150 的 3 月和 140 的 5 月性能。

按月份分组:

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

或者

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")

推荐阅读