考慮下表:如何刪除符合條件的記錄,並保留50?
CREATE TABLE `prize` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`prize_details_id` bigint(20) NOT NULL,
`status` tinyint(4) DEFAULT '0',
`available_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `prize_details_id_idx` (`prize_details_id`),
KEY `status_idx` (`status`),
KEY `available_at_idx` (`available_at`),
CONSTRAINT `prize_prize_details_id_prize_detail_id` FOREIGN KEY (`prize_details_id`) REFERENCES `prize_detail` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1611419 DEFAULT CHARSET=latin1;
我希望做的是刪除n
記錄,其中n
是匹配的記錄總數的條件少20.表是相當大(大於1m記錄)。
該條件是一個複雜的情況,涉及對頻繁變化的數據進行相對日期查詢,並且還涉及其他幾個表上的聯接,因此首先選擇與條件匹配的數量,然後刪除少於20個的isn據我所知,我不會工作。
的條件是所有的以下內容:
prize_details_id
是x
(需要幾個不同的ID運行相同的查詢)available_at
是空prize_id
沒有在另一個存在表status
是1
tier
(onth Èprize_detail
表)高於y
所以,最終是最後的記錄保持20最新(即匹配所有其他標準)根據到某個日期?最高?是什麼讓這些最後的特殊? – MPelletier