如何在不同的条件行中按相同的值分组(mysql数据库)

q9rjltbz  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(377)

我有这张table:

+-----------+-----------+---------------------+
| id        | member_id | date                |
+-----------+-----------+---------------------+
| 1         |     2     | 2020-07-27 21:53:46 |
| 2         |     1     | 2020-07-27 22:03:58 |
| 3         |     1     | 2020-07-27 22:09:16 |
| 4         |     1     | 2020-07-27 22:11:33 |
| 5         |     2     | 2020-07-27 22:12:21 |
-----------------------------------------------

我想 GROUP BY 像这样:

+-----------+-----------+---------------------+
| id        | member_id | date                |
+-----------+-----------+---------------------+
| 1         |     2     | 2020-07-27 21:53:46 |
| 2         |     1     | 2020-07-27 22:03:58 |
| 5         |     2     | 2020-07-27 22:12:21 |
-----------------------------------------------

但当我把 GROUP BY member_id 它只返回我两行(1,2)

goucqfw6

goucqfw61#

我认为这是一个间隙和孤岛问题,您需要在其中显示 member_id 与“上一行”不同。
下面是一种使用窗口函数的方法(在mysql 8.0中提供): lag() 给出 member_id 在前一行中,我们可以将其与当前行中的值进行比较:

select id, member_id, date
from (
    select t.*, lag(member_id) over(order by date) lag_member_id
    from mytable t
) t
where not lag_member_id <=> member_id 
order by date

db fiddlde上的演示:

id | member_id | date               
-: | --------: | :------------------
 1 |         2 | 2020-07-27 21:53:46
 2 |         1 | 2020-07-27 22:03:58
 5 |         2 | 2020-07-27 22:12:21

相关问题