根据活动时间长度显示表中记录的数量?

时间:2015-10-16 08:21:35

标签: mysql sql

如果我的用户信息表包含日期时间列,其注册日期(即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)

但是这个计算结果是关闭的,因为它只按YEAR分组结果,而不是今天的实际日期。如同在2014年12月注册的人仍将出现在计数中#1;" 1" 2015年1月......尽管实际上应该考虑实际的注册日期,而不仅仅是年份。

建议?

3 个答案:

答案 0 :(得分:1)

试试这个:

{{1}}

答案 1 :(得分:0)

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

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:这不太准确,因为假设日期为365年。但它支持任何年份范围,你不必改变它来支持从n到n + 1的年份差异。

答案 2 :(得分:0)

你可以试试这个:

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