-3
SELECT DATE_FORMAT( max(login_time),'%Y-%m-%d') from 
aaa AS b,user AS a where b.user_id = a.user_id
GROUP BY b.user_id ORDER BY b.user_id 
4

3 回答 3

0
SELECT DATE_FORMAT(max(a.login_time), '%Y-%m-%d')    
FROM aaa AS a,
JOIN user b
ON b.user_id = a.user_id
GROUP BY b.user_id ORDER BY b.user_id 

或仅日期

SELECT DATE_FORMAT(max(a.login_time), '%Y-%m-%d')    
FROM aaa AS a

如果你还没有完成,那就把两个 user_id 都INDEX打开login_time

CREATE INDEX idx_login_time ON aaa(login_time) USING BTREE;
于 2013-06-27T10:48:03.310 回答
0

在和上给出user一个复合索引:user_idlogin_time

alter table user add index (user_id, login_time);

这将用于优化加入aaa并找到每个用户的最大登录时间。

要充分利用此索引,可能需要在子查询中获取最大值:

select date_format(max_login, '%Y-%m-%d')
from aaa as b
join (select user_id, max(login_time) max_login
      from user
      group by user_id) a
on a.user_id = b.user_id
order by b.user_id
于 2013-06-27T10:50:09.447 回答
0

首先,这是一个正确的陈述:

SELECT DATE_FORMAT(max(login_time),'%Y-%m-%d')
    FROM user AS u
    INNER JOIN aaa AS a
       ON u.user_id = a.user_id
    GROUP BY a.user_id
    ORDER BY a.user_id
  • 如果您使用 InnoDB 来提高性能,请在 login_time 上添加索引。
  • 尝试通过设置 WHERE 子句来减少所选日期(例如,仅显示活动用户 [where u.status = 'active'])
  • 您还可以通过在语句末尾设置限制来限制显示的记录,例如 LIMIT 10
于 2013-06-27T10:51:21.610 回答