我有2个表。使用左连接的SQL请求
表A:(ID,类型,...)
这里ID是主键
表B:(ID,时间戳,OLD_TYPE,NEW_TYPE,...)
这里id不是主键
我想做一个sql请求,它返回的这个id与A.type不一样,最后一个(按时间戳)B.new_type。
我有2个表。使用左连接的SQL请求
表A:(ID,类型,...)
这里ID是主键
表B:(ID,时间戳,OLD_TYPE,NEW_TYPE,...)
这里id不是主键
我想做一个sql请求,它返回的这个id与A.type不一样,最后一个(按时间戳)B.new_type。
这对你有帮助Nikita?
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;
看看在documentation进一步阅读。
它有助于给你的问题一些背景。调用事物'A'和'B'使我们更难理解你的问题。 – 2013-03-18 13:40:51
请显示样本数据和输出。否则创建sql小提琴 – DevelopmentIsMyPassion 2013-03-18 13:41:05
你的问题缺乏信息。我们如何分组表B? – 2013-03-18 13:42:41