現在、私の会社のどのPCを所有しているのかを判断しようとしています。 私たちはすべてのログイン活動をMySQLテーブルに記録しています。MySQL:複数の発生をグループ化してカウントし、個々の組み合わせごとに最高の金額のみを表示します。
ここでは、どのユーザーがどのクライアントを使用しているかについての情報しか持っていませんが、ユーザーが他のマシンを使用する可能性があることを考えれば、特定のマシンで最も多くログインしているユーザーを確認する必要があります。この場合
Table: log
+----+-----------+------+----------------+
| ID | Client | user | timestamp |
+----+-----------+------+----------------+
| 1 | hostnamea | ab | xx.xx.xx xx:xx |
| 2 | hostnameb | cd | xx.xx.xx xx:xx |
| 3 | hostnameb | ab | xx.xx.xx xx:xx |
| 4 | hostnameb | ab | xx.xx.xx xx:xx |
| 5 | hostnamec | ab | xx.xx.xx xx:xx |
| 6 | hostnamec | ef | xx.xx.xx xx:xx |
| 7 | hostnamec | ef | xx.xx.xx xx:xx |
+----+-----------+------+----------------+
(timestamp is actually unimportant,
but maybe someone has an awesome optimization idea which includes the timestamp,
so I leave it here)
、ホスト名のユーザー「EF」は「hostnamec」の所有者になり
私はすでにこれまでのところ、私は「トップログイン」リストを表示することができました:
SELECT `user`, `client`, COUNT(*) logins
FROM `log`
WHERE `client` LIKE '_%' AND timestamp > "2016-09-00 00:00:00" # (filter out garbage and old machines)
GROUP BY `client, `user`
HAVING COUNT(*) > 10 (If there are less than 10 logins, the machine isn't being used anyways)
ORDER BY `user`;
これをユーザー、クライアント、およびいくつかのログインを返します。特定のユーザーがマシンにログインする頻度を指定します。
カウントで生成された余分な「ログイン」行にアクセスして使用する方法は本当に分かりません。
私の目標は、このようなものです:私の次のステップは、ホスト名を持つ別の既存のテーブルの上にアップデートすることだろうが、(それが理にかなっている場合)、それはユーザーに
UPDATE hosts
INNER JOIN query(output of first query) USING (client)
SET hosts.user = query.user
を欠けている
+-----------+------+
| Client | user |
+-----------+------+
| hostnamea | ab | (1xab, nothing else: ab wins)
| hostnameb | ab | (2x ab,1x cd: ab wins)
| hostnamec | ef | (2x ef, 1x ab: ef wins)
+-----------+------+
誰でも私の最初のクエリで私を助けることができますか? Oracleの機能を含むいくつかのソリューションや、やや複雑に設計されたテーブルがすでに見つかりました。
SQLを使った単純な選択、更新、挿入以上のことをしなければならなかったので、長い時間が経ちました。正直言って、私はちょっと混乱して私が見つけたので、私は自分の質問をしています
を試してみて、私はほぼ完全に無視しようとしていますなぜなら、元の所有者ではないマシンに誰かがログインしている可能性があるからです。 ログテーブルにログインが複数回発生する可能性があります。どのログイン(ユーザー+クライアントの組み合わせ)が最も多く発生したのかを除外し、そのユーザーを新しいクライアントの所有者として使用したいと考えています。 – Flow