2015-10-25 2 views
0

Это может быть дублирующий вопрос, но я не смог найти решение для этого. У меня есть этот вид таблицы данных ..формат таблицы sql с удалением повторяющихся записей

Name In_time out_time 
John NULL 9/1/2014 17:00 
John NULL 9/2/2014 11:18 
John NULL 9/2/2014 12:22 
John NULL 9/2/2014 13:22 
John NULL 9/3/2014 13:00 
John NULL 9/3/2014 17:13 
John NULL 9/3/2014 18:13 
John NULL 9/3/2014 19:13 

мой вопрос, как я могу удалить эти дубликаты .rows данных являются уникальными, но дата же в OUT_time колонке (без времени). Мне нужно удалить эти дубликаты навсегда, только учитывая дату, а не время. Выход должен быть таким.

Name In_time out_time 
John NULL 9/1/2014 17:00 
John NULL 9/2/2014 11:18 
John NULL 9/3/2014 13:00 
+1

Что вы сделали до сих пор? – mic4ael

ответ

2

Изменения группы заявление в год, месяц и день

SELECT name, 
     in_time, 
     min(out_time) 
FROM your_table 
GROUP BY name, 
     DATE_FORMAT(in_time, "%Y-%m-%d"); 

Чтобы удалить строку в исходной таблице вы должны сделать 2 шага сначала добавить виртуальное поле Тар автоматическим содержит дату

ALTER TABLE your_table ADD vdate DATE AS 
    (DATE_FORMAT(out_time, "%Y-%m-%d")) PERSISTENT; 

Затем создайте новый уникальный индекс с IGNORE.

ALTER IGNORE TABLE your_table ADD UNIQUE INDEX idx2 (name,vdate); 

Это удаляет непосредственно на дупликации

+0

Мне нужно удалить эти повторяющиеся строки навсегда. – Nuwan

+0

группировка по нулевому времени, а не по времени? – Andrew

+0

Создайте вторую таблицу (your_table2) с помощью вашей таблицы. ** Вставьте в your_table2 SELECT, имя, IN_time, мин (OUT_time) ОТ your_table GROUP BY имя, DATE_FORMAT (IN_time, "% Y-% m-% d"); ** то в your_table2 являются только результатом строки –

Смежные вопросы