sql >> Database teknologi >  >> RDS >> Mysql

MySQL underforespørgsel - Find kun første post i en LEFT JOIN

Dette er den greatest-n-per-group problem, som ofte stilles på Stack Overflow.

Sådan vil jeg løse det i dit scenarie:

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;

Det vil sige, vi vil have mh at være den seneste række i tbl_member_login_history for det givne medlems-id. Så vi søger efter en anden række mh2 det er endnu nyere. Hvis ingen er nyere end mh række er fundet, derefter mh2.* vil være NULL, så mh skal være den seneste.

Jeg antager, at denne tabel har en primær nøglekolonne, der indeholder stigende værdier. For dette eksempel antager jeg, at kolonnenavnet er pk .

Bruger LEFT OUTER JOIN til begge referencer til login-historiktabellen betyder, at m række vil blive rapporteret, selvom der ikke er nogen matchende række.



  1. Hvordan logger/sporer jeg Oracle-lagrede procedurekald med parameterværdier?

  2. Tjek om der findes en tabel i SQL Server

  3. Wampserver-ikonet bliver ikke helt grønt, mysql-tjenester starter ikke op?

  4. Hvordan kan jeg lave en FØR OPDATERET trigger med sql server?