【发布时间】:2019-05-12 12:59:49
【问题描述】:
我有一个包含用户登录信息的表。我想对 last 重复记录进行分组。例如:
+---+------------+-------------+-------------+------------------+
| | ip | platform | browser | date |
+---+------------+-------------+-------------+------------------+
| 1 | 127.0.0.1 | Windows | Chrome | 2018-01-01 00:00 |
| 2 | 127.0.0.1 | Windows | Chrome | 2018-01-02 00:00 |
| 3 | 10.0.0.1 | Linux | Firefox | 2018-01-03 00:00 |
| 4 | 127.0.0.1 | Windows | Chrome | 2018-01-04 00:00 |
+---+------------+-------------+-------------+------------------+
将输出:
+-----+------------+-------------+-------------+-------------+
| | ip | platform | browser | num_records |
+-----+------------+-------------+-------------+-------------+
| 1-2 | 127.0.0.1 | Windows | Chrome | 2 |
| 3 | 10.0.0.1 | Linux | Firefox | 1 |
| 4 | 127.0.0.1 | Windows | Chrome | 1 |
+-----+------------+-------------+-------------+-------------+
(为了简单起见,我发出了日期,应该有像id这样的日期范围)
请注意,ID 1,2,4 相同,但 1,2 和 4 由于时间轴的原因被单独分组(有另一条记录将它们分开)。
要查找重复项,我应该考虑以下列:ip, platform, browser。如果某些内容与这些列不同,则它不是重复的。
我能做到:
SELECT ip, platform, browser, COUNT(1) AS num_records
FROM users_logins
WHERE user_id = 1
GROUP BY ip, platform, browser
但这会在不考虑时间线的情况下对所有记录进行分组。
【问题讨论】:
-
如果有更早的时间重复怎么办?
-
你有主键吗?
-
@Strawberry 是的,我有一个自动增量
id列。
标签: mysql sql mariadb gaps-and-islands