我想删除大于30天的表的所有记录,但保留每个ID的最后(最年轻)2记录。 我做了一些尝试与极限2和组合,但没有得到解决方案附近。有没有人有建议?复杂的删除查询
DROP TABLE IF EXISTS mytable;
CREATE TABLE `mytable` (
`timestamp` datetime NOT NULL,
`id` int(11) NOT NULL,
`data` varchar(100) NOT NULL,
PRIMARY KEY (`id`,`timestamp`)
);
INSERT INTO mytable VALUES
('2014-08-12',22,'data'),
('2014-08-13',22,'data'),
('2014-08-14',22,'data'),
('2014-08-15',22,'data'),
('2014-08-16',54,'data'),
('2014-08-16',22,'data'),
('2014-08-17',54,'data'),
('2014-08-18',54,'data'),
('2014-08-19',54,'data');
Expected Result
2014-08-15,22,data
2014-08-16,22,data
2014-08-18,54,data
2014-08-19,54,data
这是我迄今为止
sql = 'Delete from mytable where timestamp < DATE_SUB(NOW(), INTERVAL 30 DAY)';
这个数据集并没有很好的代表性,因为如果你放弃30天规则,你仍然会得到相同的结果! – Strawberry 2014-09-26 10:27:22
而在数据库中你有'datetime'不是'date',所以在数据中你应该有'2014-08-19 12:35:57'例如 – DarkSide 2014-09-26 10:28:15
嗨 - 我只是为了更好的可读性而举行日期 – ratmalwer 2014-09-26 10:43:43