我有 2 张桌子。
表 A : (id, type, ...)
这里 id 是主键
表 B : (id, timestamp, old_type, new_type, ...)
这里 id 不是主键
我想发出一个 sql 请求,返回这样的 id,每个 A.type 与最后一个(按时间戳)B.new_type 不同。
这对你有帮助吗尼基塔?
select a.* from A a where a.type!= (
select b.new_type from B b order by `timestamp` desc limit 1
)
尝试:
select a.id, a.type
from A a
join (select id, max(`timestamp`) max_timestamp from B group by id) mb
on a.id = mb.id
join B b on mb.id = b.id and mb.max_timestamp = b.`timestamp`
where a.type <> b.new_type
使用触发器来记录事件,像这样(未经测试的代码):
CREATE TRIGGER logger BEFORE UPDATE ON A
FOR EACH ROW
BEGIN
IF NEW.Type <> OLD.Type THEN
INSER INTO B(id, timestamp, old_type, new_type, ...)
VALUES (id, CURRENT_TIMESTAMP, OLD.Type, NEW.Type, ...)
END IF;
END;
查看文档以进一步阅读。