Как мне удалить дубликаты в mySQL? - PullRequest
0 голосов
/ 09 февраля 2019

Я новичок в SQL.У меня есть таблица со следующими полями в MariaDB
(я добавил идентификатор с автоматическим приращением.)
enter image description here

Теперь мне нужно удалить строки, имеющие одинаковую дату.
Один из способов сделать это, если это фрейм данных панд,

df = df.drop_duplicates ()

Как я могу сделать это в SQL?

пример данных

date/open/high/low/close/volume    
2019.02.04 00:00:00 13.34303    13.34303    13.34143    13.34303    4
2019.02.04 00:01:00 13.34303    13.34303    13.34303    13.34303    2
★ 2019.02.04 00:02:00   13.34303    13.34323    13.34303    13.34323    2
★2019.02.04 00:02:00    13.34303    13.34323    13.34303    13.34323    2
2019.02.04 00:04:00 13.33663    13.33743    13.33623    13.33733    86
2019.02.04 00:05:00 13.33734    13.33734    13.33613    13.33613    70

желательноданные

2019.02.04 00:00:00 13.34303    13.34303    13.34143    13.34303    4
2019.02.04 00:01:00 13.34303    13.34303    13.34303    13.34303    2
★2019.02.04 00:02:00    13.34303    13.34323    13.34303    13.34323    2
2019.02.04 00:03:00 13.34333    13.34333    13.33664    13.33664    14
2019.02.04 00:04:00 13.33663    13.33743    13.33623    13.33733    86
2019.02.04 00:05:00 13.33734    13.33734    13.33613    13.33613    70

Мои сведения об окружающей среде:

Версия Windows: Home 64-bit
Версия XAMPP: 7.2.8 Панель управления
Версия: 3.2.2 [Скомпилировано: 12 ноября 2015 г.]
127.0.0.1 через TCP / IP
MariaDB SSL не используется
10.1.34-MariaDB - двоичный файл mariadb.org Версия протокола протокола: 10
набор символов: UTF-8 Юникод (utf8)

За комментарий enter image description here

За ответ на команду
enter image description here

Любой совет приветствуется!

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Если речь идет о дубликатах по всей строке, я бы предложил перезагрузить таблицу.Для этой цели вы можете использовать временную таблицу:

create table temp_t as
    select distinct *
    from t;

Затем вы можете поместить ее обратно в исходную таблицу следующим образом:

truncate table t;

insert into t
    select * 
    from temp_t;

Обычно я включаю все столбцы вinsert.Но для этого типа обработки код использовал select * для генерации временной таблицы, и он просто вставляется обратно в исходную таблицу.

Используя truncate / insert, вы экономите многонакладные расходы на запись и блокировку таблицы.

0 голосов
/ 09 февраля 2019

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

DELETE t 
FROM mytable t
INNER JOIN (
    SELECT datetime FROM mytable GROUP BY datetime HAVING COUNT(*) > 1
) t1 ON t1.datetime = t.datetime;

Демонстрация на DB Fiddle


После того, как ваш вопрос был отредактирован, я понимаю, что вы хотите удалить одну из повторяющихся строк, оставив при этом другую.

Для этоговам понадобится столбец, который однозначно идентифицирует каждую запись в группах дубликатов.Давайте назовем этот столбец id.

DELETE t FROM mytable t
INNER JOIN mytable t1 ON t1.datetime = t.datetime AND t1.id < t.id;

Демонстрация по БД Fiddle

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