1

我的数据库中有 3 个表:children、family、statuslog

每次孩子签入或签出数据库时,它都会在状态日志中更新。我很久以前就这样做了,但我似乎无法弄清楚如何去做。我想创建一个连接所有 3 个表的新视图,但我只想要状态日志中的最新条目(通过使用最高 id)。

例如,状态日志如下所示:

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

显然,这将返回 children+family 元组以及每个日志条目,但我不记得如何只将它与最新的日志条目结合起来。

任何帮助,将不胜感激!

4

2 回答 2

2

使用 max(id) 的聚合查询检索给定 childID 的最后一个 ID。然后将其加入状态日志以检索其他列。

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
于 2012-04-15T01:04:08.577 回答
0

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

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

更正任何语法错误。

于 2012-04-15T02:53:33.197 回答