2016-11-16 13 views
2

В моей базе данных MySQL У меня есть таблица, подобная этому:MySQL удаления строк с повторяющимися датами держать последнюю один

Data    |Val | Val2 
2016-11-11 14:48:38 |10 | 20 
2016-11-11 14:48:38 |30 | 40 
2016-11-06 11:48:38 |50 | 60 
2016-11-08 19:48:38 |70 | 80 
2016-11-06 11:48:38 |90 |100 
2016-11-16 10:13:37 |100 |110 
2016-11-16 10:13:37 |120 |130 
2016-11-16 10:16:43 |140 |150 
2016-11-16 10:13:37 |140 |150 

Иногда в моей базе данных я могу иметь повторяющиеся даты (данные), но разные значения (val, val2), я хочу удалить все строки с повторяющимися данными, кроме последней, вставленной в базу данных. Как я могу это достичь? Например, для таблицы выше, в результате чего я хочу это:

Data    |Val |Val2 
11/11/2016 14:48 |30 |40 
08/11/2016 19:48 |70 |80 
06/11/2016 11:48 |90 |100 
16/11/2016 10:16 |140 |150 
16/11/2016 10:13 |140 |150 

Я использовал sqlite3 и я мог бы достичь того, чего я хочу, делая

delete from table where rowid not in (select max(rowid) from table group by data) 

, но я не мог найти эквивалент для mysql.

+0

Вы можете найти ответ здесь HTTP: // StackOverflow .com/вопрос s/2728413/analog-of-oracle-s-rowid-in-mysql –

+0

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

+0

1) SELECT & remember строка, которую вы хотите, 2) УДАЛИТЬ все строки, 3) ВСТАВИТЬ сохраненную строку? Это не красиво, но ... – Mawg

ответ

0

Это удалит наименьший Val когда имеют ту же дату

SQL DEMO

DELETE t1 
FROM Table1 t1 
JOIN Table1 t2 
    ON t1.`Data` = t2.`Data` 
AND t1.`Val` < t2.`Val`; 

OUTPUT

enter image description here