-2

我有 2 张桌子。

表 A : (id, type, ...)
这里 id 是主键

表 B : (id, timestamp, old_type, new_type, ...)
这里 id 不是主键

我想发出一个 sql 请求,返回这样的 id,每个 A.type 与最后一个(按时间戳)B.new_type 不同。

4

3 回答 3

1

这对你有帮助吗尼基塔?

select a.* from A a where a.type!= (
     select b.new_type from B b order by `timestamp` desc limit 1
)
于 2013-03-18T13:41:14.433 回答
0

尝试:

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
于 2013-03-18T13:55:40.760 回答
0

使用触发器来记录事件,像这样(未经测试的代码):

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;

查看文档以进一步阅读。

于 2013-03-18T14:06:04.860 回答