mysql - 仅当特定列在同一天内有两个或多个不同的 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
.
解决方案
按名称和 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
推荐阅读
- css - 如何允许 Googlebot 为我的流星应用程序读取捆绑的 CSS
- html - 网页模板 Golang
- powershell - “找不到路径”纠缠测试结果
- mysql - 使用 SQL 如何按时间对数据进行分组,计算多个指标?
- networking - BGP自治系统的地理位置
- php - 正则表达式查找所有单词不包括空格和制表符(\n \t 等)
- java - Tensorflow 1.10.0 Java API:java.lang.IllegalStateException:尝试使用未初始化的值
- meteor - 从 `/imports` 目录外部导入 Meteor
- javascript - 将跨度更改为输入并更新我的数据库
- java - 将毫秒转换为具有偏移小时数的 java 日期 (Z05:00)