Mysql SQL查询以获取ID的计数值,其中ID计数>1的最后14个后续月份按每个月分组

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

我有一个用户详细信息表,其中添加了每个登录名。我正在开发一个页面来查看每个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(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;