php - 如何获得销售生产力
问题描述
我有两张桌子,
表 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 的方差让我完全难过。
解决方案
为了给你一个准确的答案,我需要对价格变化的原因和报告的目标做更多的解释。
尽管如此,根据您对问题的描述,我将从以下角度进行攻击:
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")
推荐阅读
- regex - Grep 正则表达式重叠匹配
- php - 使用 PHP 将 HTML 表单数据作为表格发布
- sql - 基于条件比较两个子表的聚合返回记录
- java - 将协议缓冲区编码的消息从 Python 服务器发送到 Java 客户端
- xml - 创建一个按属性值排序的表
- c# - 类型的 DbContext 不能被池化
- c++ - 当 C++ 函数不从右值引用参数“移动”时,这是合理的方法吗?
- rust - 使用 into_serde 反序列化字符串会使应用程序恐慌
- oracle - 为什么使用来自不同应用程序的相同查询和相同 ODBC 连接获取不同数量的记录?
- javascript - 如果包装在函数中,CryptoJS 不会解密