MySQL 删除除每个 id 的最新行之外的所有行

MySQL Delete all rows except newest one for each id

我有一个名为 devices_last_insert

的 table

数据库获取一些设备(大约 4 个不同 device_id)的数据更新并将它们存储在另一个 table。

devices_last_insert table 我想保存每个设备的最后时间戳。 目前它保存每一行,正如你在这里看到的:

给这个table添加数据的trigger写在获取数据的table中:

BEGIN
  INSERT INTO devices_last_insert(devices_last_insert.timestamp, 
  devices_last_insert.device_id)
  VALUES(NEW.timestamp, NEW.device);
END

我想更改触发器,以便它会添加一行,如果 device_id 不存在于带有时间戳的 devices_last_insert 中(原始 table 中的行有timestamp 列),如果 device_id 已经存在于 devices_last_insert 中,将更新时间戳。 问题是 NEW 不能用于 DELETE 查询。

您不需要手动删除旧记录,MySQL 可以为您完成繁重的工作。 您可以在 device_id 上创建唯一索引(或主键),然后使用 insert on duplicate 语法:

INSERT INTO devices_last_insert 
(devices_last_insert.timestamp, devices_last_insert.device_id)
VALUES (NEW.timestamp, NEW.device)
ON DUPLICATE KEY UPDATE timestamp = VALUES(timestamp)