Mysql SQL查询以获取ID的计数值,其中ID计数>1的最后14个后续月份按每个月分组
我有一个用户详细信息表,其中添加了每个登录名。我正在开发一个页面来查看每个ID的登录计数,如>1和>10等,以及之前12个月的每个月的登录计数 以下是我的查询,以获取过去30天的计数:Mysql SQL查询以获取ID的计数值,其中ID计数>1的最后14个后续月份按每个月分组,mysql,grouping,Mysql,Grouping,我有一个用户详细信息表,其中添加了每个登录名。我正在开发一个页面来查看每个ID的登录计数,如>1和>10等,以及之前12个月的每个月的登录计数 以下是我的查询,以获取过去30天的计数: SELECT count(*) FROM ( select intClientId from tbl_pi_userdetails where LoginTime >= NOW() - INTERVAL 30 DAY group by intClientId HAVING COUNT(intClientI
SELECT count(*) FROM ( select intClientId from tbl_pi_userdetails where LoginTime >= NOW() - INTERVAL 30 DAY group by intClientId HAVING COUNT(intClientId) = 1)tbl_pi_userdetails
同样地,我们也希望它能持续14个月
select
date_format(date_sub(now(), interval months_ago month), "%b %Y") as month,
count(intClientId) as count
from(
select
months_ago,
date(date_format(date_sub(now(), interval months_ago month),
"%Y-%m-01")) start_date,
date(date_format(date_sub(now(), interval months_ago-1 month),
"%Y-%m-01")) end_date
from (select 0 months_ago union select 1 union select 2 union select
3 union select 4 union select 5 union select 6 union select 7 union
select 8 union select 9 union select 10 union select 11 union select
12 union select 13 order by months_ago) months_ago
) date_range left join tbl_pi_userdetails on LoginTime >= start_date and
LoginTime < end_date and
LoginTime <= now() group by intClientId, months_ago,
intClientId having count(intClientId) = 1;
我的表看起来像这样,具有不同的ID和登录时间。
预期成果:
预期结果
Fiddle:您能展示一下您的表和您目前编写的SQL吗向我们展示一些示例表数据和预期结果-全部为格式化文本而不是图像。在你开始之前先阅读。我已经发布了上面的问题。我会再次向你推荐jarlh的comment@PrabhudevaM你说的拖尾是什么意思?滑行的?或者每隔一段时间?查询的结果给出了每个ID的登录总数。我的要求是每个月有多少个ID的登录次数超过一次。例:2020年1月15个ID中有10个ID的计数超过1个。2020年1月-10个Counts必须更改为countintClientId>0到>1。更新@Prabhudeva M-以下查询正是我想要的工作方式。非常感谢。这里还有一个复杂的问题。我需要在结果不可用的月份计算0。
select month_year, count(*) from
(select DATE_FORMAT(LoginTime, '%Y-%m') as month_year, count(intClientId), intClientId
from tbl_pi_userdetails where
LoginTime >= now() - INTERVAL 15 MONTH
group by DATE_FORMAT(LoginTime, '%Y-%m'), intClientId having count(intClientId)> 1
order by DATE_FORMAT(LoginTime, '%Y-%m'), intClientId ) results
group by month_year
order by month_year desc;