【问题标题】:Display count of records from table based on length of time active?根据活动时间长度显示表中的记录数?
【发布时间】:2015-10-16 17:00:08
【问题描述】:

如果我有一个包含用户信息的表,其中包含名为“已添加”的注册日期(即 2015-01-01)的日期时间列,我如何显示每个以下期间注册/活动的所有记录的计数:

1) 不到一年 2) 1 到 2 年 3) 2 至 3 年 4) ... 以此类推,只要“添加”的年份过去了。

我试过这个:

SELECT Count(*) AS count, YEAR(CURDATE()) - YEAR(added) AS years
FROM users
GROUP BY YEAR(added)

但该计算已关闭,因为它只是按年份对结果进行分组,而不是按从今天开始的实际日期。例如,在 2014 年 12 月注册的人在 2015 年 1 月仍会显示为计数“1”...尽管实际上应该考虑实际注册日期,而不仅仅是年份。

建议?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    试试这个:

    SELECT Count(*) AS count, 
    SUM(IF (DATE_ADD(added, INTERVAL 1 YEAR) > NOW(), 1, 0)) AS num_1year,
    SUM(IF (DATE_ADD(added, INTERVAL 1 YEAR) < NOW() AND DATE_ADD(added, INTERVAL 2 YEAR) > NOW(), 1, 0)) AS num_2year,
    SUM(IF (DATE_ADD(added, INTERVAL 2 YEAR) < NOW() AND DATE_ADD(added, INTERVAL 3 YEAR) > NOW(), 1, 0)) AS num_3year
    FROM users
    

    【讨论】:

    • 美女!差不多就是这样......在第 3 行的末尾缺少一个逗号,但就是这样!谢谢……现在一切都说得通了。
    • 您如何计算每年的唯一身份用户数?例如,如果有人在 2014 年加入,我不会在 2015 年算上他,假设 user_id 是存储用户 ID 的字段,并且单个 user_id 多年来可能已经注册了多个课程/会员资格。有什么建议吗?
    • 还不是这样,因为 users 表中每个用户都有一个唯一的行?
    【解决方案2】:

    当您使用GROUP BY 语句时,选择部分需要聚合函数。

    SELECT Count(*) AS count, YEAR(CURDATE() - YEAR(added) AS years
    FROM users                ^^^ no way to group
    GROUP BY YEAR(added)
    

    使用DATEDIFF 函数计算日期差异。

    SELECT Count(*) AS count, FLOOR(DATEDIFF(CURDATE() - added)/365) AS year_diff
    FROM users              
    GROUP BY years_diff
    

    PS:这不太准确,因为假设 datediff 365 为一年。但它支持任何年份范围,您无需更改它以支持从 n 到 n+1 的年份差异。

    【讨论】:

      【解决方案3】:

      你可以试试这个:

      1) 不到一年

      SELECT COUNT(*) as num FROM users WHERE TIMESTAMPDIFF(MONTH, added, NOW()) < 12
      

      2) 1 到 2 年

      SELECT COUNT(*) as num FROM users WHERE DATEDIFF(added, NOW()) BETWEEN 1 AND 2
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-23
        • 2011-01-03
        • 1970-01-01
        • 2018-04-24
        相关资源
        最近更新 更多