MySQL GROUP BY 两个或多个条件

主要是帮同学解决的一个问题,用到 SQL 中的 GROUP BY。

问题:一个表(AttackIP)有两个字段,端口号(Port)和访问时间(Atime),求出同一分钟内每个 IP 出现的次数。

解决思路

考虑到逻辑的清晰,先创建一个视图 AttackLog。视图将每条记录中的时间字段转换为时间戳,并且修改为该时间所属分钟的初始时刻(Atime)。如此,问题转换为查找相同 Atime 分组内具有相同 Port 字段的记录数量。

SQL 语句如下:

测试数据

AttackIP 表

Port
Atime

22
2013-03-03 03:05:06

22
2013-03-03 03:05:50

22
2013-03-03 03:05:45

42
2013-03-03 03:05:45

42
2013-03-03 03:04:45

22
2013-03-03 03:06:45

42
2013-03-03


阅读全文 »