Как запросить это в MySQL - PullRequest
       3

Как запросить это в MySQL

0 голосов
/ 26 сентября 2018

У меня есть вопрос о запросах.Мне нужно суммировать общее количество администраторов на аккаунт, который активен / зарегистрирован менее 15 дней с этого момента.Проблема в том, что одна учетная запись может иметь много администраторов, и в таблице администраторов есть поле «Последний вход в систему» ​​с датой.

Таким образом, мы хотим получить всех администраторов, которые не вошли в систему менее 15 дней с этого момента .. так что если одинадминистратора, вошедшего в систему через 15 дней, не будет учитываться ...

Пример:

Account Table

id |  Account name
------------------
1  |  Tiger company
-------------------
2  |  Bear Company

Admin Table

id | Account ID | admin name  | last login
-------------------------------------------
1  |     1      | Billy Tiger | 09-01-2018
2  |     1      | Shirley     | 09-22-2018
3  |     2      | John Bear   | 09-06-2018
4  |     2      | Kyle Bear   | 09-08-2018

Таким образом, на основании приведенных выше данных, если сегодня 09-26-2018, то мне нужно получитьобщее количество на учетную запись и суммируйте, что администратор на сайт не регистрируется или никогда не авторизуется менее 15 дней с 09-26-2018, что ниже 09-11-2018, поэтому, если один из администраторов вошел в систему, не будет засчитан.

Итак, из приведенного выше примера ... я хочу получить общую сумму "1", то есть, в основном, для одного аккаунта ... hy "1", потому что администратор тигровой компании ... т "Ширли" вошел в систему09-22-2018, поэтому он активен ... так что не считал его, и компания Bear ни один из администраторов не вошел после 09-11-2018, поэтому он считается как 1 ...

Надеюсь, это объясняет примерхорошо .. извините за то, что все сбивает с толку .. возможно ли сделать это одним запросом?и, как выберите сумму (идентификатор), как «всего» ....

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Самый простой и, вероятно, самый эффективный способ масштабирования - это использовать JOIN между двумя таблицами:

SELECT `account`.`id`, `account`.`Account name`, COUNT(1) as 'Active Admins'
FROM `admin`
JOIN `account` ON `account`.`id` = `admin`.`Account_ID`
WHERE `admin`.`Last_Login` >= DATE_ADD(NOW(), INTERVAL -15 DAY)
GROUP BY `account`.`id`

Результат:

| id |  Account name | Active Admins |
|----|---------------|---------------|
|  1 | Tiger Company |             1 |

SQLFiddle

0 голосов
/ 26 сентября 2018

используйте подзапрос, вы хотите отфильтровать те учетные записи, которые имеют какой-либо идентификатор входа в систему за последние 15 дней, поэтому сначала я нахожу тех идентификаторов, которые вошли в систему за последние 15 дней и отфильтровали, а затем подсчитайте в соответствии с accountid

 CREATE TABLE `Account` (
  `id` int(11) PRIMARY KEY NOT NULL,
  `Accountname` varchar(25) NOT NULL
);


       CREATE TABLE `Admin` (
      `id` int(11) PRIMARY KEY NOT NULL,
      `Account_ID` int(11) NOT NULL,
      `Admin_Name` varchar(25) NOT NULL,
      `Last_Login` date NOT NULL
      );

  INSERT INTO Account 
  VALUES (1, 'Tiger Company'), (2, 'Bear Company');
  INSERT INTO `Admin` 
  VALUES (1, 1, 'Billy Tiger', '2018-09-01'),
  (2, 1, 'Shirley', '2018-09-22'),
  (3, 2, 'John Bear', '2018-09-06'),
  (4, 2, 'Kyle Bear','2018-09-08' );

 select t1.Account_ID
 ,a1.Accountname,
 count(distinct t1.Account_ID) as total from    
    ( 
        select a.*  from Admin a 
          left join
           (
            select distinct Account_ID from Admin
            where Last_Login>=DATE_SUB(CURDATE(), INTERVAL 15 DAY)
           ) t on a.Account_ID=t.Account_ID
           where t.Account_ID  is null
    ) t1 join Account a1 on t1.Account_ID =a1.id group by t1.Account_ID,a1.AccountName

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=baa13620bccbf6a70f6e0fc7d6e8d199

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