У меня есть схема Mysql результата (str)
, созданная (timestamp, current on create)
, и я хотел бы запустить запрос, чтобы удалить все, кроме последних 10, как бы я это сделал?Как удалить все строки из таблицы, кроме новейших 10 строк
0
A
ответ
8
DELETE FROM tablename
WHERE id NOT IN (
SELECT id FROM tablename
ORDER BY created DESC
LIMIT 10);
0
Вы должны собрать 10 Идентификаторы первый
CREATE TEMPORARY TABLE ids_to_keep ENGINE=MyISAM
SELECT id FROM tablename WHERE 1=2;
INSERT INTO ids_to_keep
SELECT id FROM tablename ORDER BY created DESC LIMIT 10
ALTER TABLE ids_to_keep ADD PRIMARY KEYS (id);
Оттуда, попробуйте один из этих двух методов:
МЕТОДИКА # 1: DELETE РЕГИСТРИРУЙТЕСЬ
DELETE A.* FROM tablename A
LEFT JOIN ids_to_keep B USING (id)
WHERE B.id IS NULL;
DROP TABLE ids_to_keep;
МЕТОДИКА # 2: ТАБЛИЦА ОТДЫХА
CREATE TABLE tablename_new LIKE tablename;
ALTER TABLE tablename RENAME tablename_org;
INSERT INTO tablename_new
SELECT A.* FROM tablename_org A INNER JOIN ids_to_keep B USING (id);
DROP TABLE tablename_org;
ALTER TABLE tablename_new RENAME tablename;
DROP TABLE ids_to_keep;
Дайте ему попробовать !!!
0
Вы также можете использовать вариант метода поиска N-го максимального значения в таблице, используя самосоединение.
DELETE FROM tablename WHERE created < (
SELECT created FROM tablename t1 WHERE
(N - 1) = (SELECT COUNT(DISTINCT(created)
FROM tablename t1
WHERE t2.created > t1.created)))
Внутренняя часть запроса дает Nth наибольшее значение «создано» из таблицы, которую можно использовать в качестве ссылки для удаления все, что было раньше.
+0
'MySQL версия сервера для правильного синтаксиса для использования рядом с FROM FROM tten WHID t2.created> t1.created))) 'в строке 4' – user2372936
0
ОК, это 9 рядов, а не 10, но вы получите идею ...
SELECT * FROM created;
+---------------------+
| t |
+---------------------+
| 2013-05-28 19:17:03 |
| 2013-05-28 19:17:06 |
| 2013-05-28 19:17:09 |
| 2013-05-28 19:17:11 |
| 2013-05-28 19:17:13 |
| 2013-05-28 19:17:16 |
| 2013-05-28 19:17:17 |
| 2013-05-28 19:17:19 |
| 2013-05-28 19:17:21 |
| 2013-05-28 19:17:23 |
| 2013-05-28 19:17:25 |
| 2013-05-28 19:17:27 |
| 2013-05-28 19:17:29 |
| 2013-05-28 19:17:31 |
| 2013-05-28 19:17:33 |
| 2013-05-28 19:17:35 |
| 2013-05-28 19:17:37 |
| 2013-05-28 19:17:39 |
+---------------------+
18 rows in set (0.00 sec)
DELETE a
FROM created a
JOIN
( SELECT x.*
FROM created x
JOIN created y
ON y.t >= x.t
GROUP
BY x.t
HAVING COUNT(*) = 10
) b
ON b.t >= a.t;
SELECT * FROM created;
+---------------------+
| t |
+---------------------+
| 2013-05-28 19:17:23 |
| 2013-05-28 19:17:25 |
| 2013-05-28 19:17:27 |
| 2013-05-28 19:17:29 |
| 2013-05-28 19:17:31 |
| 2013-05-28 19:17:33 |
| 2013-05-28 19:17:35 |
| 2013-05-28 19:17:37 |
| 2013-05-28 19:17:39 |
+---------------------+
Смежные вопросы
- 1. пакетный файл удалить все, кроме новейших 10 файлов
- 2. Как удалить все, кроме последних 10 строк из файла?
- 3. Как удалить все файлы, кроме N новейших файлов?
- 4. Удалить все строки, кроме специфических
- 5. Удалить все строки данных из таблицы Excel (кроме первого)
- 6. Удалить все, кроме 50 новых строк
- 7. Удалите все, кроме новейших строк таблицы N в каждой категории (несколько категорий объединены в varchar)
- 8. Как удалить строки таблицы (кроме первой строки) из таблицы заполнения?
- 9. Как удалить все. из строки, кроме последней?
- 10. Удалить все строки, кроме
- 11. Удалить все строки, кроме состояния
- 12. Как удалить все строки, кроме строк, которые включают TRUNCATE - INSERT
- 13. Удалить из строки все, кроме выбранных символов
- 14. Как удалить все таблицы, кроме 1
- 15. Как удалить все повторяющиеся записи, кроме одного из таблицы?
- 16. Как получить все строки из таблицы, кроме строки заголовка?
- 17. Как отобразить все, кроме первой строки таблицы?
- 18. Mysql удалить все, кроме 100 новых строк
- 19. Удалить все строки из таблицы MYSQL кроме верха/низа 50 строк
- 20. Удаление всех, кроме верхних 10 строк
- 21. Удалить все строки, кроме строк с конкретным Word - Блокнот ++
- 22. Как удалить старые файлы, кроме новейших, используя AppleScript?
- 23. Удалить все, кроме одного из повторяющихся строк в mysql
- 24. MySQL: удалите из таблицы все, кроме 20 строк?
- 25. Удалить все строки таблицы, кроме первой с помощью Javascript
- 26. Удалить все, кроме двух строк в Notepad ++
- 27. Удалить все символы из строки, кроме «а», «б», «C», «D»
- 28. Кэширование новейших строк с H2
- 29. Как удалить все символы из строки, кроме emoji
- 30. Как удалить все из строки, кроме ключевых слов в Perl?
Есть в любом случае сделать это с присоединиться? Говорит, что версия mysql не поддерживает ограничение в «in» – user2372936
Существует способ сделать это, используя самостоятельное привязку к левому соединению ... Я просто не уверен в синтаксисе на данный момент. – Orangepill
Этот стиль 'DELETE' довольно опасен по двум причинам: Reason1) Оптимизатор запросов имеет тенденцию к barf на основе self-referencing на основе DELETE /' UPDATE' (об этом я писал в DBA StackExchange: http: //dba.stackexchange.com/a/1384/877), Reason2) В репликации MySQL нет гарантии порядка строк. Таким образом, последние 10 строк могут отличаться от подчиненного, чем от его главного. – RolandoMySQLDBA