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)
我有一个名为 devices_last_insert
数据库获取一些设备(大约 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)