我有下表:
SELECT * FROM签到;
+----+--------+---------------------+
| id | userid | date_checked |
+----+--------+---------------------+
| 1 | 15 | 2019-10-08 10:22:15 |
| 2 | 15 | 2019-10-08 10:22:42 |
| 3 | 15 | 2019-10-08 10:23:01 |
| 4 | 40 | 2019-10-08 10:23:44 |
| 5 | 15 | 2019-10-08 10:24:06 |
| 6 | 15 | 2019-10-08 10:24:09 |
| 7 | 3 | 2019-10-08 10:24:59 |
+----+--------+---------------------+
我想为每组连续的相等用户ID选择date_checked最高的行。 在这个例子中,我期望这样:
+----+--------+---------------------+
| id | userid | date_checked |
+----+--------+---------------------+
| 3 | 15 | 2019-10-08 10:23:01 |
| 4 | 40 | 2019-10-08 10:23:44 |
| 6 | 15 | 2019-10-08 10:24:09 |
| 7 | 3 | 2019-10-08 10:24:59 |
+----+--------+---------------------+
请在标记为“重复的”之前,请注意:我不喜欢userid列的DISTINTC,同一用户id可以重复多次。
我该怎么做?
答案 0 :(得分:1)
这是一个典型的差距和孤岛问题。假设您使用的是MySQL 8.0,则可以使用ROW_NUMBER()解决它:
SELECT
MAX(id) id,
userid,
MAX(date_checked) date_checked
FROM (
SELECT t.*,
ROW_NUMBER() OVER(ORDER BY date_checked) rn1,
ROW_NUMBER() OVER(PARTITION BY userid ORDER BY date_checked) rn2
FROM checkin t
) x
GROUP BY rn1 - rn2, userid
答案 1 :(得分:0)
尝试以下操作:SELECT id, userid, MAX(date_checked) max_date_checked FROM checkin GROUP BY userid;