SQL удаляет определенную строку среди нескольких идентичных внешних ключей, но имеет самую старую дату - PullRequest
0 голосов
/ 25 апреля 2018

Мне нужно удалить строку из нескольких других, которые имеют идентичные внешние ключи, но мне нужно удалить самый старый.

Я не знаю самую старую дату.Поэтому сначала мне нужно проверить все остальные строки.

 DELETE FROM SOMEWHERE WHERE PROD_ID = 'me' AND DATE ???;");

Типы данных:

INT для внешнего ключа.TIMESTAMP для даты (чтобы выбрать самую старую дату)

Я использую MYSQL.

Ответы [ 3 ]

0 голосов
/ 25 апреля 2018

Попробуйте:

DELETE A FROM SOMEWHERE A JOIN (SELECT PROD_ID, MIN(DATE) OLDEST_DATE
FROM SOMEWHERE
GROUP BY PROD_ID) B ON A.PROD_ID=B.PROD_ID AND A.DATE=B.OLDEST_DATE
WHERE A.PROD_ID='me';

См. Рабочий DEMO на SQL Fiddle .

0 голосов
/ 25 апреля 2018

Подзапрос в предложении WHERE должен работать. Попробуйте что-то вроде:

DELETE FROM SOMEWHERE A WHERE A.PROD_ID = 'me' AND A.DATE = (
   SELECT MIN(B.DATE) FROM SOMEWHERE B WHERE A.PROD_ID = B.PROD_ID)

Это дает преимущество работы с несколькими идентификаторами PROD_ID в случае, если вы делаете пакет из них, а не просто буквально «я».

0 голосов
/ 25 апреля 2018
DELETE FROM SOMEWHERE WHERE PROD_ID = 'me' ORDER BY DATE DESC LIMIT 1

Это даст вам самую старую дату и удалит ее. Вы сортируете его по полю даты в порядке убывания и просто удаляете первое (самое старое).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...