gpt4 book ai didi

MySQL:对多次出现进行分组和计数,然后仅显示每个组合的最高金额

转载 作者:行者123 更新时间:2023-11-29 19:44:16 25 4
gpt4 key购买 nike

我目前正在尝试确定哪个用户拥有我公司的哪台电脑。我们将每个登录事件记录在 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`;

这会返回用户、客户端和登录次数,我希望这些登录信息能够指定特定用户登录计算机的频率。

我真的不知道如何访问和使用计数生成的额外“登录”行。

我的目标是这样的:

+-----------+------+
| 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)
+-----------+------+

我的下一步将是更新另一个具有主机名但缺少用户的现有表

UPDATE hosts
INNER JOIN query(output of first query) USING (client)
SET hosts.user = query.user

(如果有道理的话)

任何人都可以帮助我解决我的第一个疑问吗?我已经找到了一些解决方案,包括 Oracle 函数或设计略有不同的表。

我已经很长时间不再需要使用 SQL 进行简单的选择、更新和插入了;老实说,我对我的发现有点困惑,所以我问自己的问题

最佳答案

您可以通过在 where 子句中进行过滤来实现此目的。这是一种方法:

select l.*
from log l
where l.timestamp = (select max(l2.timestamp)
from log l2
where l2.user = l.user
);

这很容易推广到任何给定日期的所有者:

select l.*
from log l
where l.timestamp = (select max(l2.timestamp)
from log l2
where l2.timestamp <= $AsOfDate and l2.user = l.user
);

关于MySQL:对多次出现进行分组和计数,然后仅显示每个组合的最高金额,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41147092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com