有两张桌子,用于尚未预约的客户和已经去预约的客户。目的:从第一个客户开始,获取每月新访客数量的统计数据。这是我目前所拥有的:
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 马马虎虎,以及如何实现它——还没有任何想法。
如果数据在 2 个表中 - 将它们组合起来,然后找到每个客户的最短日期,然后按月计算访问者数量:
另外,我在您的表格中没有分别看到客户 ID 或名字 + 姓氏的唯一性条件,数据可能不完全正确。