我有两个表,如下所示:
表:案例
id
名字
状态
case_no
表:备注
id
case_id
note_date
备注
我希望能够创建一个查询,该查询从cases表中获取数据,并且只为cases表中的每一行从notes表中获取最近的条目。到目前为止,我一点运气都没有。
如有任何指示,我们将不胜感激。
发布于 2010-10-06 12:16:44
这将仅返回附加了备注的案例:
SELECT c.*,
x.*
FROM CASES c
JOIN NOTES x ON x.case_id = c.case_id
JOIN (SELECT n.case_id,
MAX(n.note_date) AS max_note_date
FROM NOTES n
GROUP BY n.case_id) y ON y.case_id = x.case_id
AND y.max_note_date = x.note_date如果您想要所有的案例,无论它们是否附加了备注:
SELECT c.*,
x.*
FROM CASES c
LEFT JOIN NOTES x ON x.case_id = c.case_id
JOIN (SELECT n.case_id,
MAX(n.note_date) AS max_note_date
FROM NOTES n
GROUP BY n.case_id) y ON y.case_id = x.case_id
AND y.max_note_date = x.note_date发布于 2010-10-06 12:16:46
SELECT *
FROM cases c
INNER JOIN notes n ON n.case_id = c.id
AND n.id = (SELECT MAX(id)
FROM notes
WHERE case_id = c.id)此外,通常的做法是将指向最后一个注释id的指针直接保存在cases表中,并通过触发器支持它
发布于 2013-03-20 21:05:06
我最近一直有同样的问题,这个论坛对我帮助很大,但我发现OMG小马的答案并不完整。它适用于有注释的情况,但不适用于没有注释的情况,这是我的问题。我的答案是类似的,但我不是用注释加入组查询,而是用案例加入它。
它将是:
SELECT c.*, x.*
FROM CASES c
LEFT JOIN (SELECT n.case_id, MAX(n.note_date) AS max_note_date
FROM NOTES n
GROUP BY n.case_id) y ON y.case_id = c.case_id
LEFT JOIN NOTES x ON x.case_id = c.case_id AND x.note_date=y.max_note_date它也适用于只获取带有注释的案例,删除一个left关键字或两个都移除
https://stackoverflow.com/questions/3869426
复制相似问题