首页 > 解决方案 > 仅当特定列在同一天内有两个或多个不同的 ip_address 时才选择记录

问题描述

我希望能够选择ip_address同一天内不同的记录并将其分组name

举个例子:

name   |    ip_address    |    date
user1  |    127.0.0.1     |  2020-01-01
user1  |    127.0.0.2     |  2020-01-01
user2  |    127.0.0.1     |  2020-01-01
user2  |    127.0.0.2     |  2020-01-02
user3  |    127.0.0.1     |  2020-01-03
user3  |    127.0.0.4     |  2020-01-03
user3  |    127.0.0.1     |  2020-01-04
user3  |    127.0.0.1     |  2020-01-04

期望的输出:

name   |    date
user1  |    2020-01-01
user3  |    2020-01-03

user1并且user3被选中是因为它们在同一天有不同的地址。

user1用于在2020-01-01.

user3用于在2020-01-03.

标签: mysqlgroup-byhaving-clause

解决方案


按名称和 dt 使用组

然后使用count(distinct ip address)检查条件,如果超过一个则选择记录

SELECT name, dt
FROM src
GROUP BY name, dt
HAVING COUNT(DISTINCT ip_address) > 1;

结果

name    dt
user1   2020-01-01
user3   2020-01-03

推荐阅读