请教mysql 如何按时间排序后,超过N条数据的早期记录?

神的理想 2014-01-09 11:01:44
有一个表,要定期删除 按time字段排序的老记录(超过N条记录的老数据),类似先进先出的删除方法,只保留固定的新记录,sql语句该如何写了?
...全文
173 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
神的理想 2014-01-09
  • 打赏
  • 举报
回复
引用 7 楼 ermuzi 的回复:
DELETE FROM table WHERE time<(SELECT MIN(time) FROM (SELECT * FROM table ORDER BY time DESC LIMIT n) AS AA)
这个测试了可行!
ermuzi 2014-01-09
  • 打赏
  • 举报
回复
DELETE FROM table WHERE time<(SELECT MIN(time) FROM (SELECT * FROM table ORDER BY time DESC LIMIT n) AS AA)
ermuzi 2014-01-09
  • 打赏
  • 举报
回复
SELECT * FROM table WHERE time<(SELECT MIN(time) FROM (SELECT * FROM table ORDER BY time DESC LIMIT n) AS AA)
神的理想 2014-01-09
  • 打赏
  • 举报
回复
需要按 sendtime 排序后,删除超过 12条记录的老数据!
神的理想 2014-01-09
  • 打赏
  • 举报
回复
引用 3 楼 wwwwb 的回复:
贴建表及插入记录的SQL,及要求结果出来看看 应该可以

-- 导出  表 fox.ut_mail 结构
CREATE TABLE IF NOT EXISTS `ut_mail` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `playerid` varbinary(20) NOT NULL,
  `sendname` varchar(20) DEFAULT NULL,
  `title` varchar(100) DEFAULT NULL,
  `content` text,
  `sendtime` datetime DEFAULT NULL,
  `readit` smallint(6) NOT NULL DEFAULT '0',
  `items` text,
  PRIMARY KEY (`id`),
  KEY `playerid` (`playerid`),
  KEY `index0_name` (`sendname`)
) ENGINE=InnoDB AUTO_INCREMENT=4285 DEFAULT CHARSET=utf8;

-- 正在导出表  fox.ut_mail 的数据:~523 rows (大约)
/*!40000 ALTER TABLE `ut_mail` DISABLE KEYS */;
INSERT INTO `ut_mail` (`id`, `playerid`, `sendname`, `title`, `content`, `sendtime`, `readit`, `items`) VALUES
	(3639, _binary 0x7864657667736E303030306D5132624939, 'system_mail', '888', '2013-12-10 10:15:10', 0, '{"zp":5588,"ex":5842,"jb":20000}'),
	(4284, _binary 0x7864657667733730304730686334444944, 'system_mail', '888', '2014-01-09 10:04:21', 0, '{"zp":5588,"ex":5842,"jb":20000,"30800":1}');
/*!40000 ALTER TABLE `ut_mail` ENABLE KEYS */;
wwwwb 2014-01-09
  • 打赏
  • 举报
回复
贴建表及插入记录的SQL,及要求结果出来看看 应该可以
神的理想 2014-01-09
  • 打赏
  • 举报
回复
引用 1 楼 WWWWA 的回复:
示例: DELETE a FROM a4 a WHERE 4>(SELECT COUNT(*) FROM a4 WHERE a.time<=time)
不是删除超过某个时间点的数据,是按时间排序后,超过n条记录的数据!
WWWWA 2014-01-09
  • 打赏
  • 举报
回复
示例: DELETE a FROM a4 a WHERE 4>(SELECT COUNT(*) FROM a4 WHERE a.time<=time)

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧