SQL удаляет все строки, кроме некоторых

У меня есть таблица со следующими столбцами (URL-адресов):

 [id,url,visited,timestamp]
 Types:[int,string,int,long]

Я хочу:

Удалите все URL-адреса, за исключением 10 невидимых, которые приостанавливают более высокую отметку времени (или удаляют все, если все посещаются, например)

Возможно ли это сделать в одном запросе? В любом случае, каков наилучший запрос (запросы) для этого?

Заранее спасибо

Ответ 1

Я не думаю, что TOP работает в sqlite - нужно использовать LIMIT

DELETE FROM mytable WHERE id NOT IN ( 
   SELECT id FROM mytable  
   WHERE visited = false 
   ORDER BY timestamp DESC
   LIMIT 10  
   )  

Ответ 2

DELETE FROM tableofDeletion
WHERE
  -- Delete all items not in the following select
  -- ordered by the timestamp so we can get the top 10 
  id NOT IN (SELECT id 
             FROM tableofDeletion
             WHERE 
                 visited = 0 -- false
             ORDER BY timestamp DESC
             LIMIT 10)

Я думаю, что это обеспечивает то, что вы ищете.