如果我的用户信息表包含日期时间列,其注册日期(即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月......尽管实际上应该考虑实际的注册日期,而不仅仅是年份。
建议?
答案 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