Удаление данных на основе указанных c столбцов и приоритета с использованием PostgreSQL - PullRequest
0 голосов
/ 17 июня 2020

У меня есть несколько столбцов, включая: device_id, time и type, теперь я хочу удалить повторяющиеся данные.

Вот мой пример данных:

+-----------+------------+------+
| device_id |    time    | type |
+-----------+------------+------+
| dev 1     | 2020/06/17 | A    |
| dev 1     | 2020/06/17 | B    |
| dev 2     | 2020/06/18 | B    |
| dev 2     | 2020/06/18 | B    |
| dev 3     | 2020/06/17 | A    |
| dev 3     | 2020/06/17 | A    |
+-----------+------------+------+

Я хочу, чтобы вывод был после правила:

  1. в dev 1 в 2020/6/17 есть типы A и B, оставьте A
  2. в dev 2 в 2020/6/18 будет только тип B, оставьте B
  3. в dev 3 в 2020/6/17 будет только тип A, оставьте A

И после удаления мой ожидаемый результат будет:

 device_id |  time      | type
-----------+------------+------
 dev 1     | 2020/06/17 | A
 dev 2     | 2020/06/18 | B
 dev 3     | 2020/06/17 | A

Есть ли оператор удаления, который может выполнить эту работу? Любые предложения приветствуются!

если какая-либо часть моего вопроса не очень ясна,

пожалуйста, дайте мне знать, спасибо.

Дополнительно подробности:

  1. Этот вопрос похож на меня, но мне нужен оператор удаления и postgresql версия
  2. Имеется около 90 миллионов данных в моей базе данных (данные IOT), поэтому, если оператор SQL имеет высокую эффективность, будет приветствоваться

1 Ответ

0 голосов
/ 18 июня 2020

После обсуждения с руководителем моей группы и взятия ссылки из главы : Удаление повторяющихся строк с помощью подзапроса

Наконец, я получил следующее решение:

DELETE FROM My_table
WHERE id IN 
    (SELECT t.id
     FROM
        (SELECT id,
         ROW_NUMBER() OVER( PARTITION BY device_id,
             time
        ORDER BY type) AS row_num
        FROM My_table) t
    WHERE t.row_num > 1);

Я думаю, что главное - найти уникальный объект (например: id) из повторяющихся строк

и использовать его в качестве критерия поиска.

Поскольку в моей БД много данных, я установил индекс ключи, включая device_id, время и тип .

Если у кого-то есть лучший ответ, поделитесь им со мной, спасибо!

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