我有两个看起来像这样的表:
表:案例
ID
命名
状态
case_no
表:备注
ID
CASE_ID
note_date
笔记
我希望能够创建一个查询来从案例表中获取数据,并且只能从案例表中的每一行中的notes表中获取最新的条目。到目前为止,我根本没有运气。
任何指针都会非常感激
答案 0 :(得分:11)
这将只返回带附注的案例:
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
答案 1 :(得分:5)
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)
通常的做法是将指针直接保存在cases
表中的最后一个音符ID并使用触发器支持
答案 2 :(得分:1)
我最近遇到了同样的问题,这个论坛对我帮助很大,但我发现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
获取只删除一个左关键字或两者的注释的情况也是有效的