Diferente y consultas SQL grupales

Tengo una consulta MySQL un poco compleja para mí y no puedo entender cómo escribirla sin comer toneladas de memoria. (Realmente no me importa si lo haría)

Tengo la siguiente tabla:

TABLE: users(id,ip) ------------------------------------ 4BF1510 | 40.145.10.99  510SD55 | 65.12.105.42 SAME ID --> 510SD55 | 45.184.15.10 201505V | 40.145.10.99 <-- SAME IP (A) 984AZ6C | 72.98.45.76 | 10.15.78.10 <-- SAME IP (B) | 10.15.78.10  B1D56SX | SAME ID --> B1D56SX | 

Quiero una consulta que solo capte 1 elemento por ID único o IP, entonces:

 4BF1510 | 40.145.10.99 510SD55 | 65.12.105.42 984AZ6C | 72.98.45.76 | 10.15.78.10 B1D56SX | 

Las cosas más importantes:

  • Si varias entradas tienen la misma IP y la misma ID -> se agruparán
  • Si varias entradas tienen la misma IP pero diferentes IDs -> no se agruparán
  • Si varias entradas tienen la misma ID pero diferentes IPs -> se agruparán
  • Si varias entradas tienen la misma IP pero campos ID vacíos -> se agruparán
  • Si varias entradas tienen la misma ID pero campos IP vacíos -> se agruparán

Lo que significa que la ID debe tener la primera prioridad de confianza, ya que varios usuarios pueden usar la misma IP.

¿Alguna forma efectiva de lograr eso?

Toneladas de gracias.

Lo que quieres hacer se puede lograr usando group_contact .

Ejemplo

SELECCIONE id, GROUP_CONCAT (ip) como ips DESDE el grupo de registros por id

editar: se olvidó del grupo por