我想刪除大於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