从连接表中获取最高列值

时间:2014-10-22 07:42:54

标签: mysql sql

在理解除最基本的连接概念之外的所有方面都有点麻烦。这些图表没什么帮助。

我想加入三张桌子:

  • 环境中,
  • 会话和
  • 日志

这是表格的一些截图。

环境:

Environments

会话:

Sessions

日志:

Logs

我想选择列environment.envCode和logs.type。我想要的是从每个环境的最后一个日志中获取logs.type。环境和日志通过会话与会话相关联。会话中的envCode和日志中的sessions.sessionID。

我已经尝试了几种查询方式,但似乎无法做到这一点。这是我尝试过的方法之一:

 SELECT environments.envCode
        ,logs.type 
        FROM environments
        LEFT JOIN session
        ON environments.envCode = session.envCode
        LEFT JOIN logs
        ON session.sessionID = logs.sessionID
        WHERE logs.logID = (SELECT MAX(logID) FROM logs);

我现在得到的是一个结果,仅针对日志中logID最高的行。有道理,我理解为什么它没有给我我想要的结果,但我仍然不确定如何获得我想要的结果。

1 个答案:

答案 0 :(得分:2)

您只需要那些以后没有日志条目EXISTS的结果记录:

select 
  environments.envcode,
  logs.type 
from environments
left join session on environments.envcode = session.envcode
left join logs on session.sessionid = logs.sessionid
where not exists
(
  select *
  from sessions later_session
  join logs later_log on later_log.sessionid = later_session.sessionid
  where later_session.envcode = session.envcode
  and later_log.created > logs.created
);

编辑:我更改了上面的查询,以便选择最新的日志,而不是最新的会话。