Mysql

Mysql為每組選擇最近的2條記錄使用者___你s和ruser

  • June 30, 2017

我有兩個表使用者和 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                     |

這裡重新測試

引用自:https://dba.stackexchange.com/questions/177667