2016-11-29 15 views
0

Удалить старую запись в таблице до/после вставки записи в эту таблицу и удалить старую запись только тогда, когда запись счет больше двух.Удалить старую запись до/после вставки записи в таблицу, если количество записей составляет> 2

Как достичь следующий сценарий:

Таблица Имя: Sample

Id Name Date Position 
1 phani 2013 Trainee 
2 phani 2014 Developer 

Теперь мы вставляем еще один рекорд для Фани

т.е. 3 Фани 2015 sr.Developer

Результаты:

Id Name Date Position 
1 phani 2013 Trainee 
2 phani 2014 Developer 
3 phani 2015 sr.Developer 

Теперь мы должны создать один триггер, который триггер должен удалить старую запись

ожидаемых результатов (средства 2013 год запись должна быть удалить.):

Id Name Date Position 
2 phani 2014 Developer 
3 phani 2015 sr.Developer 

Теперь предположим, что в 2016 году позиция изменилась с sr.developer на Project Manager.

На этот раз 2014 год запись должна быть удалить и вставить новую запись, как показано ниже:

Id Name Date Position 
3 phani 2015 sr.Developer 
4 phani 2016 Project Manager 
+3

Вы используете SQL Server или Postgres? Пожалуйста, отметьте свой вопрос соответствующим образом. –

ответ

0

Похоже, вы уже знаете, наш ответ. Создайте триггер after insert, который проверяет, больше ли количество строк с заданным именем больше двух. Если так, найдите самую старую дату, соответствующую этому имени, и удалите все строки с этой датой и именем.

0

Предполагая, что вы используете SQL Server в качестве сервера базы данных. Следующий запрос даст результат, который вы ищете. Вы должны просто включить эту логику в определение триггера.

DELETE T1 FROM 
TableName T1 
WHERE T1.[Date] = (SELECT MIN([Date]) 
        FROM TableName T2 
        WHERE T1.ID = T2.ID 
        HAVING COUNT(*) > 2)