【问题标题】:Finding a date from a SUM从 SUM 中查找日期
【发布时间】:2011-01-07 16:09:46
【问题描述】:

我很难找到我的客户在什么日期达到了他们的收入阈值。

customer_id | Amount | created_at
---------------------------
1134       | 10   | 01.01.2010    
1134       | 15   | 02.01.2010    
1134       | 5    | 03.24.2010    
1235       | 10   | 01.03.2010    
1235       | 15   | 01.03.2010    
1235       | 30   | 01.03.2010    
1756       | 50   | 01.05.2010    
1756       | 100  | 01.25.2010    

为了确定他们赚了多少,我运行了一个简单的查询,如下所示:

SELECT customer_id, SUM(amount) 
FROM table GROUP BY customer_id

但我需要能够找到例如客户总金额达到 100 美元的日期。

非常感谢任何帮助。谢谢!

【问题讨论】:

    标签: sql mysql


    【解决方案1】:

    杰西,

    我相信您正在寻找“运行总计”计算的版本。

    看看这个帖子calculate-a-running-total。 那里有许多有用的链接。

    这篇文章有很多你可以重复使用的代码:http://www.sqlteam.com/article/calculating-running-totals

    【讨论】:

    • 谢谢,帮了大忙。
    【解决方案2】:

    有点像有子句

    SELECT customer_id, SUM(amount) as Total FROM table GROUP BY customer_id with Total > 100

    【讨论】:

    • 嗯,我认为只返回总金额超过 100 美元的客户。我需要找到他们达到 100 美元的确切日期,即。如果客户今天的总金额为 150 美元,我需要找到他们超过 100 美元的日期。
    【解决方案3】:

    我不确定 MySQL 是否支持子查询,所以请谨慎对待:

    SELECT  customer_id
          , MIN(created_at) AS FirstDate
    FROM    ( SELECT    customer_id
                      , created_at
                      , ( SELECT    SUM(amount)
                          FROM      [Table] t
                          WHERE     t.CustomerID = [Table].CustomerID
                                    AND t.created_at <= [Table].created_at
                        ) AS RunTot
              FROM      [Table]
            ) x
    WHERE   x.RunTot >= 100
    GROUP BY customer_id
    

    【讨论】:

      猜你喜欢
      • 2015-10-05
      • 2019-06-21
      • 2011-01-18
      • 2013-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多