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

SQLite

здесь данные

   |  80 |    1536843922000 | 24440271 | 26B008D0-EDA3-4F83-9AFF-6C04BBB1BF33 |
   | 109 |    1536843922000 | 36656927 | 9856BAB6-51BE-4EA8-B0D7-72ABF4A452A4 |
   |  83 |    1536843922000 | 94020805 | 26B008D0-EDA3-4F83-9AFF-6C04BBB1BF33 |

   |  77 |    1536930322000 | 22240444 | 26B008D0-EDA3-4F83-9AFF-6C04BBB1BF33 |
   |  53 |    1536930322000 | 24424792 | 26B008D0-EDA3-4F83-9AFF-6C04BBB1BF33 |
   |  79 |    1536930322000 | 24440271 | 26B008D0-EDA3-4F83-9AFF-6C04BBB1BF33 |
   | 113 |    1536930322000 | 37473218 | 9856BAB6-51BE-4EA8-B0D7-72ABF4A452A4 |
   | 115 |    1536930322000 | 38483615 | 9856BAB6-51BE-4EA8-B0D7-72ABF4A452A4 |
   | 116 |    1536930322000 | 38483615 | 9856BAB6-51BE-4EA8-B0D7-72ABF4A452A4 |
   |  47 |    1537016722000 | 24253674 | 26B008D0-EDA3-4F83-9AFF-6C04BBB1BF33 |
   | 105 |    1537016722000 | 34664388 | 9856BAB6-51BE-4EA8-B0D7-72ABF4A452A4 |
   | 117 |    1537016722000 | 38483615 | 9856BAB6-51BE-4EA8-B0D7-72ABF4A452A4 |
   |  58 |    1537103122000 | 37045208 | 9856BAB6-51BE-4EA8-B0D7-72ABF4A452A4 |
   |  59 |    1537103122000 | 37045208 | 9856BAB6-51BE-4EA8-B0D7-72ABF4A452A4 |

А вот запрос sqlite, который удаляет дубликаты:

DELETE FROM notification_invoice WHERE notificationDate >= 1536883200000   AND providerId in ("26B008D0-EDA3-4F83-9AFF-6C04BBB1BF33","9856BAB6-51BE-4EA8-B0D7-72ABF4A452A4") 
     AND EXISTS (
            SELECT 1
              FROM notification_invoice t2
             WHERE t2.providerId in ("26B008D0-EDA3-4F83-9AFF-6C04BBB1BF33","9856BAB6-51BE-4EA8-B0D7-72ABF4A452A4") 
               AND t2.notificationDate = notification_invoice.notificationDate
               AND notification_invoice.notificationDate >= 1536019200000
               AND t2.ownerKey  = notification_invoice.ownerKey 
               AND t2._id > notification_invoice._id
       )

А вот результат:

   | _id | notificationDate | ownerKey | providerId                           |
   |-----+------------------+----------+--------------------------------------|
   |  58 |    1537103122000 | 37045208 | 9856BAB6-51BE-4EA8-B0D7-72ABF4A452A4 |
   | 115 |    1536930322000 | 38483615 | 9856BAB6-51BE-4EA8-B0D7-72ABF4A452A4 |

Нет, я проверяю результат, получая все данные:

select _id, notificationDate, ownerKey, providerid from notification_invoice where notificationDate >= 1536883200000 and providerId in ("26B008D0-EDA3-4F83-9AFF-6C04BBB1BF33","9856BAB6-51BE-4EA8-B0D7-72ABF4A452A4") order by  ownerKey, notificationDate

здесь результат:

| _id | notifDate | ownerKey | providerId                           |
|-----+------------------+----------+--------------------------------------|
|  77 |    1536930322000 | 22240444 | 26B008D0-EDA3-4F83-9AFF-6C04BBB1BF33 |
|  47 |    1537016722000 | 24253674 | 26B008D0-EDA3-4F83-9AFF-6C04BBB1BF33 |
|  53 |    1536930322000 | 24424792 | 26B008D0-EDA3-4F83-9AFF-6C04BBB1BF33 |
|  79 |    1536930322000 | 24440271 | 26B008D0-EDA3-4F83-9AFF-6C04BBB1BF33 |
| 105 |    1537016722000 | 34664388 | 9856BAB6-51BE-4EA8-B0D7-72ABF4A452A4 |
|  59 |    1537103122000 | 37045208 | 9856BAB6-51BE-4EA8-B0D7-72ABF4A452A4 |
| 113 |    1536930322000 | 37473218 | 9856BAB6-51BE-4EA8-B0D7-72ABF4A452A4 |
| 116 |    1536930322000 | 38483615 | 9856BAB6-51BE-4EA8-B0D7-72ABF4A452A4 |
| 117 |    1537016722000 | 38483615 | 9856BAB6-51BE-4EA8-B0D7-72ABF4A452A4 |

В случае успеха удалите все дубликаты, кроме одного:

| 116 |    1536930322000 | 38483615 | 9856BAB6-51BE-4EA8-B0D7-72ABF4A452A4 |

Почему бы не удалить эту запись?

1 Ответ

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

Для _id = 116 в ваших данных выборки есть только 1 _id = 117, такие какt2._id > notification_invoice._id,но для этих 2 идентификаторов (116 и 117) это условие:

t2.notificationDate = notification_invoice.notificationDate

не выполняется.Так что EXIST возвращает false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...