SQLite: Удалить все остальные дубликаты? - PullRequest
0 голосов
/ 03 декабря 2018

запрос, который возвращает все уникальные (не повторяющиеся) записи:

select distinct notificationDate, ownerKey 
FROM notification_invoice 
where notificationDate >= 1536019200000 
and providerId in ("1234","567") 

Теперь мне нужен запрос, который удаляет все остальные (повторяющиеся) обратные записи в этой таблице.Как я могу сделать это в sqlite?

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

На основе предоставленной информации, что _id является первичным ключом.

Вы можете удалить все записи, где _id не является максимальным (_id) значением для уведомления, ключ владельца

delete
  from notification_invoice a
where a._id not in (select max(b._id)
                      FROM notification_invoice b
                     where b.notificationDate >= 1536019200000 
                       and b.providerId in ("1234","567") 
                    group by b.notificationdate
                         ,b.ownerKey
                   )
0 голосов
/ 03 декабря 2018

Если предположить, что _id является первичным ключом, то приведенный ниже запрос удалит все избыточные дубликаты:

DELETE FROM notification_invoice t1
WHERE notificationDate >= 1536019200000 
  and providerId in ("1234","567") 
  AND EXISTS (
     SELECT 1 FROM notification_invoice t2
     WHERE t2.notificationDate = t1.notificationDate 
       and t1.ownerKey = t2.ownerKey 
       and providerId in ("1234","567") 
       AND t1._id < t2._id
  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...