#sql #sql-delete
#sql #sql-удалить
Вопрос:
У меня есть данные в таблице tab_asg
, такие как :
start_date end_date person_id
------------------------------------
19-08-2012 18-08-2012 1
19-08-2012 16-08-2016 1
17-08-2016 31-12-4712 1
Я хочу удалить первую строку из этой таблицы where end_date < start_date
и первые две строки start_date одинаковы.
delete from tab_asg
where end_date <start_date;
Я добавил условие end_date < start_date
к своему запросу. Как я могу добавить 2-е условие, то есть 1-я из двух строк start_date одинакова?
Комментарии:
1.
I want to delete first row from this table
… вам нужно указать порядок для понятия «первая строка», чтобы оно имело какой-либо смысл.2. @TimBiegeleisen — Спасибо, но то, что у меня есть, указывает на условие, какую строку мне нужно удалить, которая всегда будет первой строкой
3. Вы хотите удалить все строки, где
end_date < start_date
.??<br>Каково второе условие???4. Нет первой строки без указания вами порядка.
5. Для какой СУБД это предназначено? Пожалуйста, добавьте тег, чтобы указать, используете ли вы
mysql
,postgresql
,sql-server
oracle
илиdb2
— или что-то совсем другое.
Ответ №1:
Я думаю, что самый простой способ сделать это —
Сначала добавьте идентификатор столбца первичного ключа в таблицу и заполните его уникальными идентификаторами. В SQL Server это выглядело бы примерно так:
ALTER TABLE tab_asg
ADD Id int NOT NULL IDENTITY(1,1)
Затем удалите соответствующие строки из таблицы
DELETE FROM tab_asg
WHERE Id IN
(SELECT ta1.Id FROM tab_asg ta1 LEFT JOIN tab_asg ta2
ON ta1.person_id = ta2.person_id AND ta1.start_date = ta2.start_date
AND ta1.end_date < ta2.end_date WHERE ta2.end_date IS NOT NULL)