2013-10-28 67 views
0

假设我有一个名为UserID的列和一个名为Active的表,用户名为User History如果列值与另一列匹配,则返回最近一行

我知道我可以拿最近的用户历史

select userid, field1, field2 
from us_hi 
where (userid,timestamp) 
    IN (select userid, max (timestamp) 
     from userhistory 
     group by userid) 
order by userid 

,但我会怎么做,如果我只是想通过使用从活跃用户表userid查看活跃用户?

+0

请告知您正在使用哪个RDBMS,例如mySQL,SQL Server,Oracle等。另外,请确认表格/列的确切名称 – ChrisProsser

回答

0

子选择让所有的历史表也存在于活跃用户表的用户,之后您加入子与主查询选择,这应该给你你正在寻找

SELECT USR.userid,field1, field2 
FROM userhistory USR 
INNER JOIN (SELECT UH.userid, max (UH.timestamp) timestamp 
      FROM userhistory UH 
      INNER JOIN ActiveUsers AU ON AU.UserId = UH.UserId 
      GROUP BY UH.userid) TMP ON TMP.userid = USR.userId AND USR.timestamp = UH.timestamp 
ORDER BY USR.userid 
结果
相关问题