set dateformat mdygodeclare @Customer table(cid int, email varchar(20), [date] datetime ) insert @Customervalues(1, 'a@a.com', '05/21/13'),(2, 'a@a.com', '05/24/13'),(3, 'b@b.com', '05/20/12'),(4, 'b@b.com', '05/16/11'),(5, 'c@c.com', '05/15/10')declare @product table(cid int, pcode char(1))insert @productvalues(2, 'X'),(2, 'Y'),(2, 'Z'),(1, 'X'),(1, 'Y'),(3, 'P'),(4, 'Y'),(3, 'Z')DECLARE @DELETED_ITEMS table(cid int,MaxCID int);With CTEAS(SELECT ROW_NUMBER() OVER (PARTITION BY email ORDER BY [date] DESC) AS Rn,*FROM @Customer),CTE1AS(SELECT *FROM(SELECT *,MAX(CASE WHEN Rn = 1 THEN cid END) OVER (PARTITION BY email) AS MaxCIDFROM CTE)tWHERE Rn >1)UPDATE pSET p.cid = d.MaxCIDOUTPUT DELETED.cid,INSERTED.cid INTo @DELETED_ITEMSFROM @product pINNER JOIN CTE1 dOn d.cid = p.cidDELETE cFROM @Customer cINNER JOIN @DELETED_ITEMS dOn d.cid = c.cidselect * from @Customerselect * from @productoutput------------------------------------------2 a@a.com 2013-05-24 00:00:00.0003 b@b.com 2012-05-20 00:00:00.0005 c@c.com 2010-05-15 00:00:00.000cid pcode2 X2 Y2 Z2 X2 Y3 P3 Y3 Z
------------------------------------------------------------------------------------------------------SQL Server MVPhttp://visakhm.blogspot.com/https://www.facebook.com/VmBlogs