Вы можете использовать join
в delete
:
delete x
from x join
y
on x.id = y.id and x.date < y.date;
Если вы просто хотите выбрать такие строки (что, на мой взгляд, безопаснее):
select x.*
from x join
y
on x.id = y.id and x.date < y.date;
Приведенное выше делает весьма разумное предположение, что date
хранится в формате даты / времени, а не в виде строки.
Если ваш столбец «date» хранится в виде строки, вам следует исправить данные. Сначала преобразуйте формат в формат по умолчанию в вашей системе:
update x
set x.date = str_to_date(x.date, <whatever the format is here>);
Формат даты неоднозначен - я не знаю, какой день, а какой месяц.
Затем преобразовать столбец в дату:
alter table t
modify column date date;