Я пытаюсь написать SQL для автоматического удаления некоторых записей из базы данных, но у меня возникли некоторые проблемы с логикой, и я хочу посмотреть, может ли кто-нибудь помочь мне с этим запросом.
В основном у меня есть таблица с именем image. В изображении есть столбец для основного идентификатора, вторичного идентификатора, типа, года и даты.
Основной идентификатор может иметь несколько дополнительных идентификаторов, что означает наличие нескольких строк одного и того же основного идентификатора с разными дополнительными идентификаторами. Каждый вторичный идентификатор наверняка будет иметь две строки: тип small и тип large. Некоторые из вторичных идентификаторов имеют повторяющиеся данные, поэтому может быть 6 строк (выбрано произвольное число), что означает, что один и тот же тип маленького и большого повторяется 3 раза для одного вторичного идентификатора для одного основного идентификатора. Все это может быть на один год, а затем повторяться на следующий год.
Это трудно понять, поэтому позвольте мне создать наглядный пример некоторых данных. Я плохо разбираюсь в форматировании, поэтому порядок строк данных будет таким, как я его напечатал выше: основной идентификатор, дополнительный идентификатор, тип, год и дата.
EX:
1000 3000 Small 2010 2010-11-28
1000 3000 Large 2010 2010-11-28
1000 3000 Small 2010 2010-11-29
1000 3000 Large 2010 2010-11-29
1000 3000 Small 2011 2010-11-30
1000 3000 Large 2011 2010-11-30
1000 3001 Small 2010 2010-11-28
1000 3001 Large 2010 2010-11-28
1000 3001 Small 2010 2010-11-28
1000 3001 Large 2010 2010-11-28
1000 3001 Small 2011 2010-11-28
1000 3001 Large 2011 2010-11-28
Вы можете видеть, что могут быть повторяющиеся данные для одного дополнительного идентификатора с одинаковыми датой и годом. Существуют также данные, которые могут дублироваться на основе одного и того же вторичного идентификатора и года, даже если дата выходной или просто другая.
В основном мне нужен запрос, который будет проходить через таблицу, заполненную такими данными, и удалять ненужные записи, которые не нужны.
Мне нужны только две записи, маленькая и большая, для каждого вторичного идентификатора, для каждого года (не даты), для каждого основного идентификатора в этой таблице изображений, сохраняя самую новую по дате.
Так, например, я ожидаю, что эти записи останутся после запуска этого скрипта:
1000 3000 Small 2010 2010-11-29
1000 3000 Large 2010 2010-11-29
1000 3000 Small 2011 2010-11-30
1000 3000 Large 2011 2010-11-30
1000 3001 Small 2010 2010-11-28
1000 3001 Large 2010 2010-11-28
1000 3001 Small 2011 2010-11-28
1000 3001 Large 2011 2010-11-28
Опять же, это только пример для одного основного идентификатора и пары вторичных идентификаторов, в этой таблице может быть х число основных идентификаторов.
Как мне написать запрос, который удалит лишние строки в этой таблице изображений, как определено в моем примере?