tengo esta tabla:
+-----------+-----------+---------------------+ | 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 | ----------------------------------------------- Y me gustaría GROUP BY algo como esto:
+-----------+-----------+---------------------+ | 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 | ----------------------------------------------- Pero cuando pongo GROUP BY member_id me devuelve dos filas (1, 2)
Entiendo esto como un problema de lagunas e islas, en el que desea mostrar las filas cuyo member_id de miembro es diferente a la fila "anterior".
Aquí hay un enfoque usando funciones de ventana (disponibles en MySQL 8.0): lag() da el member_id en la fila anterior, que luego podemos comparar con el valor en la fila actual:
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 dateidentificación | id_miembro | fecha -: | --------: | :------------------ 1 | 2 | 2020-07-27 21:53:46 2 | 1 | 2020-07-27 22:03:58 5 | 2 | 2020-07-27 22:12:21