MySQL根据某字段保留最新10条

项目有一个需求,表中的数据根据某个固定字段只需要保留最新的10条,过期数据可以删掉,同时设置定时删除,根据该需求,建立函数和事件如下:
MySQL 8.0以上:

CREATE DEFINER=`root`@`%` PROCEDURE `DeleteSampledataOpcKep`()
BEGIN 
	DELETE t1 
	FROM em_sampledata_opc_kep t1
		INNER JOIN (
				SELECT 
						ID,
						ROW_NUMBER() OVER(PARTITION BY TagTab ORDER BY DataTime DESC,ID DESC) AS rn
				FROM em_sampledata_opc_kep
	) t2 ON t1.ID = t2.ID
	WHERE t2.rn > 5;
END

MySQL5.7

DELETE t1
FROM your_table t1
WHERE (SELECT COUNT(*) FROM your_table t2 
WHERE t2.TagTab = t1.TagTab AND (t2.DateTime>t1.DateTime OR (t2.DateTime=t1.DateTime AND t2.ID>t1.ID))) >= 10;

事件:

CREATE DEFINER=`root`@`%` EVENT `DeleteSampledataOpcKep` 
ON SCHEDULE EVERY 10 SECOND 
STARTS '2016-08-01 03:31:05' ON COMPLETION NOT PRESERVE ENABLE 
DO CALL DeleteSampledataOpcKep

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值