Запрос SQL 3(Удаление из таблицы)

sql

Здравствуйте! Вы мне очень помогли с прошлым запросом. Там я разобрался. Не могли бы вы еще раз подсказать, как решить эту задачу.

Есть таблица лога.

{ID, Name, FileType, FileName, LoadDate}

Требуется оставить в таблице только последние по дате {LoadDate} имена файлов {FileName} для каждой комбинации {Name, FileType} остальное удалить.

Пример:

Данные:

ID Name FileType FileName LoadDate
4 A01 F1 n1 01.01.2012
5 A03 F1 n2 10.01.2012
6 A03 F2 n3 15.01.2012
7 A03 F2 n4 05.01.2012

Результат:

ID Name FileType FileName LoadDate
4 A01 F1 n1 01.01.2012
5 A03 F1 n2 10.01.2012
6 A03 F2 n3 15.01.2012
Ответы:
Не указана СУБД, так что сложно советовать что-то определённое. Например в SQLite можно написать так:
delete from таблица where exists(select * from таблица as t where t.Name=таблица.Name and t.FileType=таблица.FileType and t.LoadDate>таблица.LoadDate)
Но например MySQL не разрешает выбирать в подзапросе из той же таблицы, из которой происходит удаление, и там приходится использовать временную таблицу:
create temporary table temp1 as select id from таблица where exists(select * from таблица as t where t.Name=таблица.Name and t.FileType=таблица.FileType and t.LoadDate>таблица.LoadDate);
delete from таблица where id in (select id from temp1);
drop temporary table temp1;


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.