У меня есть страница для каждой учетной записи, которая отображает последние 10 логинов с IP-адресом и датой. Мне нужно только последние 10 из них для каждой учетной записи, поэтому я бы хотел удалить 11, 12, 13 строку с тем же значением account_id
. Моя структура таблицы:Удалить строки с индексом выше X с тем же значением
+----+------------+------------+------------+
| id | account_id | ipv4 | timestamp |
+----+------------+------------+------------+
| 25 | 9977930 | 1299288404 | 1362261821 |
| 26 | 9982862 | 1604359422 | 1362262365 |
+----+------------+------------+------------+
Я пытался что-то вроде:
DELETE t1 FROM `lastlogin` t1
LEFT JOIN
(
SELECT `account_id`
FROM `lastlogin`
LIMIT 10 OFFSET 10
) t2 on t2.account_id = t1.account_id AND t2.value = t1.value
WHERE t2.value is null;
Но мой выбор утверждение неверно, а остальное тоже плохо. У меня нет хорошей идеи, как это сделать, кроме добавления нового столбца для индекса и опыта с более сложным SQL ... Может ли кто-нибудь построить этот запрос?
Я немного озадачен столбцом «значение» в вашем запросе. Это не в описании вашей таблицы. – wvdz
Я знаю - это всего лишь фрагмент кода, который я скопировал> вставить и попытался заставить его работать для меня. –