sql >> Base de Datos >  >> RDS >> Mysql

Subconsulta de MySQL:busque solo el primer registro en una UNIÓN IZQUIERDA

Este es el greatest-n-per-group problema, que se pregunta con frecuencia en Stack Overflow.

Así es como lo resolvería en su escenario:

SELECT m.memberid, m.membername, m.gender, mp.phone, mh.loggedtime, mh.ipaddy
FROM tbl_members m 
INNER JOIN tbl_members_phones mp ON m.defaultphoneid = mp.phoneid
INNER JOIN tbl_members_addresses ma ON m.defaultaddressid = ma.addressid
LEFT OUTER JOIN tbl_members_login_history mh ON m.memberid = mh.memberid
LEFT OUTER JOIN tbl_members_login_history mh2 ON m.memberid = mh2.memberid
    AND mh.pk < mh2.pk
WHERE mh2.pk IS NULL;

Es decir, queremos mh para ser la fila más reciente en tbl_member_login_history para el ID de miembro dado. Entonces buscamos otra fila mh2 eso es aún más reciente. Si ninguno es más reciente que el mh se encuentra la fila, entonces mh2.* será NULL, entonces mh debe ser el más reciente.

Supongo que esta tabla tiene una columna de clave principal que contiene valores crecientes. Para este ejemplo, asumo que el nombre de la columna es pk .

Uso de LEFT OUTER JOIN para ambos referencias a la tabla del historial de inicio de sesión significa que el m la fila se informará incluso si no hay una fila coincidente.