Mysql
Mysql為每組選擇最近的2條記錄使用者___你s和ruser
我有兩個表使用者和 login_track。每個使用者在 login_track 表中可能有也可能沒有登錄記錄。我想檢索每個使用者最近的 2 個登錄日期。
表結構如下:
users:
user_id name 1 John 2 Mike 3 Anderson .....
登錄軌道:
track_id user_id login_date 100 1 2017-06-20 101 1 2017-06-21 102 2 2017-06-21 103 1 2017-06-23 104 2 2017-06-23 105 1 2017-06-27
所以期望的結果應該是。
user_id name login_date 1 John 2017-06-27, 2017-06-23 2 Mike 2017-06-23, 2017-06-21 3 Anderson NULL
注意:使用者 id 3 (Anderson) 在login_track表中沒有記錄,即使它應該在最終結果中列出 NULL 值作為 login_date 列。
在這種情況下,我建議使用子查詢來計算使用變數的行數。
select user_id, name, group_concat(login_date) from (select user_id, login_date, name from (select user_id, login_date, name, if(@last_user = user_id, @rn := @rn + 1, @rn := 0) rn, @last_user := user_id from (select @last_user := 0, @rn := 0) a, (select users.user_id, login_date, users.name from users left join login_track on users.user_id = login_track.user_id order by users.user_id, login_date desc) b ) c where rn <= 1 ) d group by user_id; | user_id | name | group_concat(login_date) | |---------|----------|--------------------------| | 1 | John | 2017-06-27,2017-06-23 | | 2 | Mike | 2017-06-23,2017-06-21 | | 3 | Anderson | NULL |