是这样的,在数据库中有两张表,一个是用户表(user)[id, name,...], 一个是用户状态表(user_state)[id, userid, userstate, statedesc, updatetime]。现在我要查询用户列表,用户列表要包含用户名、用户状态、状态说明、状态更新时间这些个字段。在用户状态表中,一个用户可能有多个状态记录,但只有这个用户最后(也就是最近)的一条状态记录是有效的,并且在每一行中要返回的(其他已过期的状态不显示)。另外用户状态表中可能没有对应某一用户的状态信息,这时候要返回默认值为1。请教各位高手,怎样来写这个SQL语句呢?我想到了用SELECT子句中用子查询,例如 SELECT (SELECT userstate FROM user_state WHERE userid = user.id ORDER BY updatetime desc limit 1) AS userstate, user.* FROM user 但是这样写只能返回userstate,不能一并返回statedesc和updatetime。
[征集]分组取最大N条记录方法征集,及散分....
from (
select *
from user,user_state
where user_state.userid = user.id
order by user.id,updatetime desc
) t
group by user.id
from user a inner join user_state b on a.id=b.userid
where not exists (select 1 from user_state where userid=b.userid and updatetime>b.updatetime)