私は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;
しかし、特定の年に初めてコンピューターを使用するユーザーの数 (その年より前のログオン日がない) または二度とログオンしないユーザーの数を見つける select ステートメントを作成する方法について、私は困惑しています。
助言がありますか?