SQLite Insert trigger, как удалить старые записи в таблице на основе двух значений - PullRequest
0 голосов
/ 05 августа 2020

Я использую SQLite Android, и у меня есть таблица, содержащая два столбца id и feedId, я хочу удалить старые элементы в том же feedId после вставки новых записей, если count> 10 Это таблица

id  feedId
1   1
2   1
3   1
4   1
5   1
6   1
7   1
8   1
9   1
10  1
11  1
12  2
13  2
14  2
15  2
16  2
17  2
18  2
19  2
20  2
21  2
22  2

У меня 11 записей в feedId 1 и 11 записей в feedId 2, поэтому я хочу удалить 1 запись из feedId 1 и 1 запись из feedId 2

Пробовал этот запрос

CREATE TRIGGER IF NOT EXISTS articles_limiter AFTER INSERT ON articles BEGIN DELETE FROM articles WHERE feedId in (SELECT feedId FROM (SELECT feedId,count(*) as cnt FROM articles GROUP BY feedId HAVING cnt > 10)) ORDER BY id DESC LIMIT -1 OFFSET 10; end;

Но это работает, только если есть один feedId, у которого count> 10, но он не будет работать, если есть два или более feedId, у которых count> 10

1 Ответ

1 голос
/ 05 августа 2020

Если вы хотите 10 строк на feedId, используйте row_number():

select a.*
from (select a.*, row_number() over (partition by feedId order by id desc) as seqnum
      from articles a
     ) a
where seqnum <= 10;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...