我的数据库中有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
显然,这将返回子项+系列元组以及每个日志条目,但我不记得如何只将其与最新的日志条目组合。
任何帮助将不胜感激!
答案 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)
这似乎是典型的greatest-n-per-group,其中较高的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
纠正任何语法错误。