我有两张桌子。一个是包含主数据的主表。
一列包含唯一ID。第二个是日志表。
对于一个唯一ID(主表ID),日志表中有近3到4条记录。
我想获取主数据及其日志表数据(唯一ID的最高记录按降序排列)。
例如
主表
id guid desc depid
-----------------------------
1 fg1 hii 1
2 h6 hoo 2
日志表
id guid fromqueue toqueue status
-----------------------------------------------
1 fg1 1 2 1
2 fg1 2 3 2
3 h6 1 4 2
4 h6 4 5 3
例如,这里我想获取如下所示的数据
id guid desc depid status
-----------------------------------------------
1 fg1 hii 1 2
2 h6 hoo 2 3
获得此结果的查询是什么?
答案 0 :(得分:2)
这是一种方法:
select m.*, l.status
from master m join
log l
on m.guid = l.guid
where not exists (select 1
from log l2
where l2.guid = l.guid and
l2.id > l.id
);
对于性能,您需要log(guid, id)
上的索引。这会将语句转换为:"从log
表中获取具有相同guid
且不高id
的所有记录。"这相当于获取最后一条记录,假设id
列是标识列。
答案 1 :(得分:1)
尝试这样的事情:
SELECT master.id AS id, master.guid AS guid, desc, depid, MAX(status) AS status
FROM master
JOIN log ON master.id = log.id
GROUP BY master.id, master.guid, desc