2016-11-24 16 views
0

以下の表では、テーブルのクエリを取得して削除クエリを取得して、結合の古い日付に基づいて一意の従業員を削除する必要があります。列と最新の日付に基づいてデータを削除する

結果には、DoJが最新である固有のEmpNoが必要です。以下は は、あなたが行を削除したい場合は、あなたが行うことができ、テーブルデータのクエリで

DECLARE @TableTest TABLE (
    [Sid] [int] NULL, 
    [EmpNo] [int] NULL, 
    [EmpName] [nvarchar](50) NULL, 
    [DoJ] [int] NULL 
) 

INSERT INTO @TableTest VALUES 
(101,'Suresh',20160517) 
,(102,'Ravi',20160312) 
,(101,'Ramu',20161022) 
,(103,'Kumar',20160308) 
,(104,'Gopi',20160411) 
,(104,'Sridhar',20160620) 
,(104,'Suresh',20161012) 

期待される結果

Expected result

答えて

1

with todelete as (
     select tt.*, 
      row_number() over (partition by EmpNo order by Sid desc) as seqnum 
     from @tabletest 
    ) 
delete from todelete 
    where seqnum <> 1; 
+0

、私のsuggesstionは「代わりのですtodeleteから削除するwhere seqnum <> 1 "クエリはtodeleteからSELECT *を直接使用します WHERE seqnum = 1;" – Mansoor

+0

@ Mansoor。 。 。問題は、OPが「選択」または「削除」を望んでいるかどうかに関してあいまいである。私は、「削除のクエリを取得して、結合の古い日付に基づいて一意の従業員を削除する」ために「削除」を選択しました。 –

関連する問題