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
问问题
82 次
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_id
login_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 回答