我有一个用户登录历史记录表,如下所示:
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(16) | NO | | NULL | |
| ip | varchar(15) | NO | | NULL | |
| date | datetime | NO | | NULL | |
+----------+-------------+------+-----+---------+----------------+
我试图获取一个查询,可以选择在同一天共享同一个ip的所有用户。
根据评论中的要求,我在运行此查询时期望此结果
username ip date
// This 3 are linked (same ip, same day, distinct username)
Test1 10.10.20.20 28/12/2015 10:50:30
AnotherUser 10.10.20.20 27/12/2015 14:20:20
User3 10.10.20.20 28/12/2015 22:50:10
// This 2 are linked (same ip, same day, distinct username)
User159 30.10.20.20 28/12/2015 10:50:30
User156 30.10.20.20 28/12/2015 13:45:30
提前感谢您提供的任何帮助。
答案 0 :(得分:3)
试试这个:
SELECT ip, GROUP_CONCAT(DISTINCT username), DATE(`date`)
FROM myTable
GROUP BY ip, DATE(`date`)
HAVING COUNT(DISTINCT username) > 1
旁注:
Date
是MYSQL中的 keyword 。因此,请尽量避免将其作为列名。
答案 1 :(得分:0)
使用这种方式:
SELECT `ip`, GROUP_CONCAT(`username` SEPARATOR ' \t '), `date`
FROM Table
GROUP BY `date`, `ip`