我有一个 MySQL 表:
CREATE TABLE IF NOT EXISTS users_data (
userid int(11) NOT NULL,
computer varchar(30) DEFAULT NULL,
logondate date NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
这是一个包含大约 400 个唯一用户和 20 台计算机的大表,以及来自 5 年用户登录计算机的大约 20,000 个条目。
我想创建一个汇总表,列出每台特定计算机每年的唯一用户数,以及这些用户中有多少是新用户(即,在那一年之前没有登录到任何计算机的先前实例,此外对于将来没有更多登录任何计算机实例的用户:
CREATE TABLE IF NOT EXISTS summary_computer_use (
computer varchar(30) DEFAULT NULL,
year_used date NOT NULL,
number_of_users int(11) NOT NULL,
number_of_new_users int(11) NOT NULL,
number_of_terminated_users int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT into summary_computer_use (computer, year_used)
select computer, distinct year(logondate) from users_data;
我每年可以获得唯一用户:
UPDATE summary_computer_use as a
inner join (
select computer, year(logondate) as year_used,
count(distinct userid) as number_of_users
from users_data
group by computer, year(logondate)
) as b on a.computer = b.computer and
a.year_used = b.year_used
set a.number_of_users = b.number_of_users;
但是我很难理解如何编写一个选择语句来查找给定年份中首次使用计算机的用户数量(没有早于该给定年份的登录日期)或从未再次登录的用户数量。
有什么建议么?