Tabla de mensajes desde donde quiero obtener contactos recientes para 'usuario1', ahora la tabla se ve así:
| id | receiver | sender | time | |----|----------|--------|------------| | 1 | user1 | host1 | 2020-07-02 | | 2 | host2 | user1 | 2020-07-03 | | 3 | user3 | host3 | 2020-07-04 |Logré obtener el resultado esperado usando mysql:
SELECT CASE WHEN receiver = 'user1' THEN sender ELSE receiver END AS id, max(time) AS time FROM message WHERE receiver = 'user1' OR sender = 'user1' GROUP BY CASE WHEN receiver = 'user1' THEN sender ELSE receiver END;Pero cuando ejecuto esta consulta en postgres, aparece el error: Error de Postgresql: el receptor de columna debe aparecer en la cláusula GROUP BY o usarse en una función agregada. ¿Alguna solución para solucionar este problema?
Yo sugeriría distinct on :
select distinct on ( case when receiver = 'user1' then sender else receiver end ) m.* from messages m where 'user1' in (receiver, sender) order by (case when receiver = 'user1' then sender else receiver end), time desc;