连接两个表,但获取第二个表mysql中每个组的最后一条记录

时间:2016-10-31 13:26:29

标签: mysql join group-by

我有两张桌子:用户和访问。在访问中,每个用户都有多次访问。我想做什么来加入这两个表来获取用户数据,如id,user_name,User_email和最后一次访问记录,如url,unix_time。我使用了这段代码,但现在花了太长时间才完成了过去两周内没有访问过的用户

表用户:

user_id    user_name        user_email
   1          foo          foo@mail.com
   2          bar          bar@mail.com

表格访问

   id       user_id        unix_time              page
    1         1           (unixtime value)     visited page url
    2         2           (unixtime value)     visited page url
    3         1           (unixtime value)     visited page url
    4         2           (unixtime value)     visited page url

预期结果是:(每个用户最后一次访问访问表)

 id    user_id    user_name   user_email      unix_time         page
  3       1          foo      foo@mail.com    (unixtime value)  visited page url
  4       2          bar      bar@mail.com    (unixtime value)  visited page url

查询:

$two_weeks_before = date('Y-m-d',strtotime("-2 weeks"));
$month_before = date('Y-m-d',strtotime("-1 month"));

SELECT m1.* FROM visits_log m1 
LEFT JOIN visits_log m2 ON (m1.user_id = m2.user_id AND m1.id < m2.id)
WHERE m2.id IS NULL and m1.admin != '1' and
from_unixtime(m1.unix_time) < '$two_weeks_before' and
from_unixtime(m1.unix_time) > '$month_before'

所以我正在寻找一个获得相同结果但执行速度更快的查询。

1 个答案:

答案 0 :(得分:0)

您的问题仍然不是100%明确,而且您的数据样本不完整。

但是我的尝试可以从这里开始:

http://sqlfiddle.com/#!9/7a9b7/1

SELECT u.*, v.* FROM users u
LEFT JOIN visits v
ON u.user_id = v.user_id
  AND v.unix_time > now()- INTERVAL 2 WEEK