Как сделать выборку уникальных пользователей по месяцам в SQL?

Есть две таблицы, для клиентов чей прием еще не случился, и для тех, кто уже сходил на прием. Цель: достать статистические данные о количестве новых посетителей за каждый месяц, начиная с самого первого клиента. Вот что имею на данный момент:

SELECT COUNT(*), month
FROM ((SELECT name, `surename`, `inst`, MONTHNAME(date) as 'month'
       FROM clients
LEFT JOIN clients_trash ON name = name_trash AND surename = surename_trash AND inst = inst_trash
       GROUP BY inst, name, month(date))
      UNION
      (SELECT name_trash, `surename_trash`, `inst_trash`, MONTHNAME(date_trash) as 'month'
       FROM clients_trash
       GROUP BY inst_trash, name_trash, month(date_trash))) as q
GROUP BY month;

Структура БД:

create table if not exists clients
(
    ID_client int auto_increment
        primary key,
    service varchar(32) not null,
    master varchar(32) not null,
    date date not null,
    time time not null,
    name varchar(32) not null,
    surename varchar(32) not null,
    inst varchar(32) not null,
    unique (service, master, date, time)
);

И аналогичная таблица, только с припиской "_trash".

Как я понимаю, логика выполнения запроса должна быть примерно следующая: Мы берем клиентов за второй месяц(так как в первом итак все уникальные), и сравниваем с первым месяцем посредством "NOT IN", после третий месяц со вторым и первым и т.д. Только вот SQL я знаю так себе, и как реализовать это - пока идей нет.


Ответы (1 шт):

Автор решения: Novitskiy Denis

Если данные находятся в 2х таблицах - объедините их, затем найдите минимальную дату для каждого клиента, а затем посчитайте количество посетителей по месяцам:

select year (min_date), month (min_date), count(full_name)
from (select full_name, min(date) as min_date
from ( select surename+' '+name as full_name, date from clients
union 
select surename+' '+name, date from clients_trash) xx
group by full_name ) x
group by year (min_date), month (min_date)

Так же, не вижу у вас в таблицах ID клиента или условия уникальности на Имя+Фамилия, соответственно, данные могут быть не совсем корректными.

→ Ссылка