【问题标题】:Select to Calculate Sales Average by Customer taking First Sales into Account MYSQL选择通过将首次销售考虑在内的客户计算销售平均值 MYSQL
【发布时间】:2016-09-05 08:45:22
【问题描述】:

我在 Mysql 中有这个客户的销售表

+-----------+------------+-------+-----------------+
| Customer  |    Date    | Sales | Date_First_Sale |
+-----------+------------+-------+-----------------+
| Jane      | 2016-04-30 |   903 | 2015-02-03      |
| Jane      | 2016-02-03 |    51 | 2015-02-03      |
| Jane      | 2016-03-09 |   192 | 2015-02-03      |
| John      | 2016-05-10 |    64 | 2015-10-03      |
| John      | 2016-04-16 |   880 | 2015-10-03      |
| John      | 2016-08-17 |   386 | 2015-10-03      |
| John      | 2016-03-01 |   503 | 2015-10-03      |
| Juan      | 2016-07-06 |   765 | 2015-09-01      |
| Juan      | 2016-01-20 |    36 | 2015-09-01      |
| Juan      | 2016-03-03 |   928 | 2015-09-01      |
| Momo      | 2016-06-29 |   573 | 2015-09-01      |
| Momo      | 2016-04-25 |   375 | 2015-09-01      |
| Momo      | 2016-06-10 |   999 | 2015-09-01      |
| Nour      | 2016-02-28 |   956 | 2015-05-01      |
| Nour      | 2016-01-03 |   582 | 2015-05-01      |
| Nour      | 2016-08-17 |   366 | 2015-05-01      |
| Philip    | 2016-03-22 |   296 | 2015-09-01      |
| Philip    | 2016-04-14 |   459 | 2015-09-01      |
| Sylvie    | 2016-03-29 |   551 | 2015-09-03      |
| Sylvie    | 2016-02-14 |   896 | 2015-09-03      |
+-----------+------------+-------+-----------------+

我需要从今天开始计算过去 12 个月(52 或 53 周,具体取决于日历?)每周计算的客户平均销售额。

现在的问题是,我不想计算在 12 个月内首次购买的客户的平均每周销售额,例如,如果当前日期是 2016-09-01,并且客户做了他在 2016 年 7 月 24 日首次购买,不应以 12 个月为基础计算平均值,而应仅根据 2016 年 7 月 24 日和 2016 年 9 月 1 日之间产生的每周销售额计算平均值。

对于在 12 个月范围内首次购买的客户,则应仅计算 12 个月的平均值。

我一直试图找到这个 SELECT,但由于我对更复杂查询的 MySQL 知识有限,我没有找到任何东西!

提前感谢您的帮助

【问题讨论】:

  • Jane 的 Date_First_Sale 应该是 2016-02-03,但给出的是 2015-04-30。请更新记录
  • 如果你要在这里待一段时间,我想你是时候掌握如何提问了。考虑遵循这个简单的两步操作过程: 1. 如果您还没有这样做,请提供适当的 CREATE 和 INSERT 语句(和/或 sqlfiddle),以便我们可以更轻松地复制问题。 2. 如果您尚未这样做,请提供与步骤 1 中提供的信息相对应的所需结果集。
  • @Renaud :检查我更新的答案。它应该工作

标签: mysql average


【解决方案1】:

这应该对你有帮助

SELECT Customer, (total_sales/weeks) AS avg_sales FROM
(
SELECT Customer, total_sales, Date_First_Sale, IF(weeks>52,52,weeks) as weeks
FROM (
    SELECT Customer, SUM(Sales) AS total_sales, Date_First_Sale, TIMESTAMPDIFF(WEEK, Date_First_Sale, CURDATE()) AS weeks
    FROM (
        SELECT Customer, sales , Date_First_Sale
        FROM test.SO_customer
        WHERE Date > DATE_SUB(curdate(), INTERVAL 1 YEAR)
         ) as subTable
    GROUP BY Customer
    ) as subTable2
) as subTable3

【讨论】:

  • 感谢沙达布。这似乎有效。让我用真实数据进行一些测试,然后我回复你!
  • 这个查询返回一个有效的结果集是不可能的
  • 谢谢草莓,你有什么建议吗?
  • @RenaudDUGERT 是的。见上面的评论。
  • @RenaudDUGERT :此外,“INTERVAL 52 WEEK”而不是“INTERVAL 1 YEAR”也应避免 1 天+- 问题。顺便提一下。
猜你喜欢
  • 1970-01-01
  • 2016-03-26
  • 2021-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多