【问题标题】:Count most recent renewals by memberID按 memberID 计算最近的续订
【发布时间】:2015-09-15 04:30:21
【问题描述】:

我有一个按日期跟踪会员续订的订阅表。更新适用于日历年,但会员最早可以在 10 月 1 日更新,在这种情况下,他们的有效期将持续到下一年的 12 月 31 日。因此,可以在一月份续订,然后在同年十月再次续订。我按月报告会员总数,我想避免将其计为 2 个会员。

每条记录都有一个唯一的prodID,但由于上面的续订选项,memberID 的记录可以超过 1 条。 payDate是交易日期

我的声明是:

$sql = "SELECT 
            EXTRACT(MONTH FROM payDate) as month, 
            EXTRACT(YEAR FROM payDate) as year, 
            count(*) 
            FROM 
                memberDues
            WHERE payDate >= $lastYear-10-01
            GROUP BY 
                month, 
                year
            ORDER BY 
                year ASC, 
                month ASC";

我得到这样的输出(未格式化):

Member dues paid by month  
October         46  
November        30  
December        99  
January         42  
February         8  
March            9  
April            4  
May              1  
June             3  
Member Total:  242

如何修改选择语句以避免在报告期间重复续订?

【问题讨论】:

    标签: mysql count group-by duplicates


    【解决方案1】:

    您需要按 memberID 分组,以使一个会员续订不被重复。

      SELECT year, month, count(memberID) FROM (
      SELECT memberID,
      EXTRACT(MONTH FROM payDate) as month, 
        EXTRACT(YEAR FROM payDate) as year, 
        count(*) 
        FROM 
            memberDues
        WHERE payDate >= $lastYear-10-01
        GROUP BY 
            memberID,
            month, 
            year
        ORDER BY 
            year ASC, 
            month ASC";
        )TMP GROUP BY year, month
    

    【讨论】:

    • 这种方法会导致列表成为单个续订事件,而不是每月总数。我得到每个列表 1 续订的月份,然后一次又一次地循环几个月,直到总计 242 个。另外,正如上面评论中提到的,我需要确保我正在计算后一个续订(如果有 2 个)并且它总计在正确的月份。示例输出见图片:inkari.com/asmc/images/looping-output.jpg">
    【解决方案2】:

    计算每个月不同的 memberID 应该可以完成这项工作:

                    SELECT 
                    EXTRACT(MONTH FROM payDate) as month, 
                    EXTRACT(YEAR FROM payDate) as year, 
                    count(DISTINCT memberID) 
                    FROM 
                        memberDues
                    WHERE payDate >= $lastYear-10-01
                    GROUP BY 
                        month, 
                        year
                    ORDER BY 
                        year ASC, 
                        month ASC
    

    【讨论】:

    • 这种方法会导致小计消失。另外,我需要确保我计算的是后者的续订(如果有 2 个)并且它在正确的月份总计
    猜你喜欢
    • 2020-05-28
    • 2018-07-02
    • 2019-02-27
    • 2018-11-20
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 2014-06-28
    • 2014-10-05
    相关资源
    最近更新 更多