これはgreatest-n-per-group
スタックオーバーフローで頻繁に尋ねられる問題。
これがあなたのシナリオでそれを解決する方法です:
SELECT m.memberid、m.membername、m.gender、mp.phone、mh.loggedtime、mh.ipaddyFROM tbl_members m INNER JOIN tbl_members_phones mp ON m.defaultphoneid =mp.phoneidINNER JOIN tbl_members_addresses maONm。 defaultaddressid =ma.addressidLEFT OUTER JOIN tbl_members_login_history mh ON m.memberid =mh.memberidLEFT OUTER JOIN tbl_members_login_history mh2 ON m.memberid =mh2.memberid AND mh.pk
つまり、 mh
が必要です 指定されたメンバーIDのtbl_member_login_historyの最新の行になります。したがって、別の行 mh2
を検索します それはさらに最近です。 mh
より最近のものがない場合 行が見つかったら、mh2。*
NULLになるため、 mh
最新のものである必要があります。
このテーブルには、増加する値を含む主キー列があると想定しています。この例では、列名は pk
であると想定しています。 。
両方にLEFTOUTERJOINを使用する ログイン履歴テーブルへの参照は、 m
を意味します 一致する行がない場合でも、行が報告されます。