2016-11-29 9 views
0

レコードをそのテーブルに挿入する前後のテーブルの古いレコードを削除し、古いレコードを削除するカウントは2より大きい。レコードの数が> 2の場合、レコードをテーブルに挿入する前後の古いレコードを削除する

次のシナリオを達成するためにどのように

表名:サンプル

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

は、今、私たちはphani

すなわち3 phani 2015 sr.Developer

のために一つ以上のレコードを挿入します

結果

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

今、私たちは1つのトリガーを作成する必要があり、そのトリガーは、古いレコードの
を削除する必要があります(手段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

が鳴ります。与えられた名前の行数が2より大きいかどうかを確認するトリガーを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) 
関連する問題