mysql - SQL 连接 : selecting last records from duplicates

标签 mysql sql

我正在研究 Python 项目“Linux Server Monitor”。当您加载监控网站时,您创建的服务器和表如下所示:

服务器:

+-----------+-----------+---------+-------------+
| server_id | auth_code | user_id | server_name |
+-----------+-----------+---------+-------------+
|         0 | xyz123    |       1 | My Server 1 |
|         1 | aabb      |      45 | BlaBlaUser  |
|         2 | asdfh1    |       1 | My Server 5 |
+-----------+-----------+---------+-------------+

创建服务器后,启动python脚本,它开始将监控数据上传到这个表(存储所有数据的地方,来自所有用户):

监控数据:

+----+-----------+---------+---------+------------+-----------------+------------------+
| id | auth_code | user_id | os_name | os_version |   external_ip   | some_other_table |
+----+-----------+---------+---------+------------+-----------------+------------------+
|  0 | aabb      |      45 | Ubuntu  |      16.04 |    77.88.99.100 | dynamic data     |
|  1 | aabb      |      45 | Ubuntu  |      16.04 |    77.88.99.100 | dynamic data 2   |
|  2 | aabb      |      45 | Ubuntu  |      16.04 |     10.10.10.10 | dynamic data 3   |
|  3 | xyz123    |       1 | Fedora  |         27 |     92.94.95.99 | different data 1 |
|  4 | xyz123    |       1 | Fedora  |         27 |     92.94.95.99 | different data 2 |
|  5 | xyz123    |       1 | Fedora  |         27 |     92.94.95.99 | different data 3 |***
|  6 | asdfh1    |       1 | CentOS  |          7 |         5.5.5.5 |  some new data 1 |
|  7 | asdfh1    |       1 | CentOS  |          7 |         5.5.5.5 |  some new data 2 |
|  8 | asdfh1    |       1 | CentOS  |          7 |         2.2.2.2 |  some new data 3 |###
+----+-----------+---------+---------+------------+-----------------+------------------+

我想加入第一个和第二个表来向用户显示这样的“重要”信息:

您的活跃服务器:

+-----------+-------------+---------+------------+-----------------+
| server_id | server_name | os_name | os_version |   external_ip   |
+-----------+-------------+---------+------------+-----------------+
|         0 | My Server 1 | Fedora  |         27 |     92.94.95.99 |***
|         2 | My Server 5 | CentOS  |          7 |         2.2.2.2 |###
+-----------+-------------+---------+------------+-----------------+

如果我通过 user_id 加入第一个和第二个表,它也会加载重复项,但我只想要该特定用户服务器的最后插入记录。在这种情况下,一台服务器的最后一条记录“external_ip”发生了变化,但另一台保持不变(标有 *** 和 ###)。

最佳答案

您可以在 subselect 上使用内部连接来获取用户的最大 ID,监控服务器

  select s.server_id, s.server_name, m.os_name, m.os_version, m.external_ip
  from servers s
  inner join Monitoring  m  on m.user_id = s.user_id  and s.auth_code = m.auth_code
  inner  join (
    select max(id) max_id,  user_id, os_name, os_version
    from Monitoring
    group by  user_id, os_name, os_version
  ) t  on t.max_id =  m.id
  where user_id = 1

关于mysql - SQL 连接 : selecting last records from duplicates,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49587436/

相关文章:

mysql - null 的警报数量小于特定值

mysql - 如何使用用户变量在存储过程中执行准备好的语句?

mysql - 尝试创建事件时出现问题

php - 左连接计数忽略左表列计数

sql - MySQL 在 Linux 和 Windows 托管数据库之间的数据中获取未知字符

sql - Snowflake 无法将变量值 "{TIMESTAMP VALUE}"转换为 TIMESTAMP_NTZ

javascript - 根据mysql日期格式格式化日期

php - 从 ip2location_db11 数据库中查找 ip

mysql - 使用 JOIN 在多个表上自由搜索

mysql - 选择所有连接行都匹配的记录