SQL запрос для получения значений счетчиков идентификаторов, где счетчик идентификаторов> 1 за последние 14 завершающих месяцев, сгруппированных по каждому месяцу - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть таблица user_details, в которую добавляется каждый логин. Я разрабатываю страницу для просмотра учетных записей, таких как> 1 и> 10 и т. Д. c для каждого идентификатора и за каждый месяц, тянущийся за предыдущие 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;

Моя таблица выглядит так с разными идентификаторами и временем входа в систему. enter image description here

Ожидаемые результаты: enter image description here

1 Ответ

0 голосов
/ 03 февраля 2020

Ожидаемые результаты

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;

Скрипка: https://www.db-fiddle.com/f/9SLYF45hyWLQaokjDz2AAR/5

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...