使用最新行加入3个表

时间:2012-04-15 00:43:58

标签: sql join

我的数据库中有3个表:儿童,家庭,状态日志

每次儿童登记或退出数据库时,都会在状态日志中更新。我很久以前就做过这个,但我似乎无法弄清楚如何做到这一点。我想创建一个连接所有3个表的新视图,但我只想从statuslog中获取最新的条目(使用最高的id)。

例如,statuslog如下所示:

childID     researcher     status     id
1           Dr. A          out        1
1           Dr. A          in         2
1           Dr. B          out        3
1           Dr. B          in         4
2           Dr. C          out        5
2           Dr. C          in         6
3           Dr. B          out        7
3           Dr. B          in         8

这就是我想要做的事情:

SELECT *
FROM children, families, statuslog
WHERE children.familyID = families.familyID AND children.childID = statuslog.childID

显然,这将返回子项+系列元组以及每个日志条目,但我不记得如何只将其与最新的日志条目组合。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

使用max(id)的聚合查询检索给定childID的最后一个ID。然后将其连接到statuslog以检索其他列。

SELECT *
FROM children
INNER JOIN families
   ON children.familyID = families.familyID
INNER JOIN 
(
  SELECT childID, researcher, status
    FROM statuslog
    INNER JOIN 
    (
      SELECT childID, max(ID) ID
        FROM statuslog
       GROUP BY childID
    ) lastSL
    ON statuslog.childID = lastSL.childid
   AND statuslog.ID = lastSL.ID
) sl
  ON children.childID = sl.childID

答案 1 :(得分:0)

这似乎是典型的,其中较高的id被解释为最新的{{3}}。这个查询应该可以解决问题:

select * from (
    select s1.* from statusLog s1
    left join statusLog s2
    on s1.childId = s2.childId and s1.id < s2.id
    where s2.id is null
) final
join children c on c.childId = final.childId
join families f on f.familyId = c.familyId

纠正任何语法错误。