Sql server SQL将44个外键的500个最新项保存在一个表中

Sql server SQL将44个外键的500个最新项保存在一个表中,sql-server,Sql Server,我有一个包含以下3列的表 Recid (primary key), different_recid(foreign key), and details 我想为10个特定的不同的写一个查询,删除那些不同的的所有行,只删除最近的行 任何人都有建议。你需要在加入队伍中多加一个任期#3。 DECLARE @MyTable TABLE ( RecID INT IDENTITY(1,1) PRIMARY KEY, Different_RecID INT, Cre

我有一个包含以下3列的表

Recid (primary key), different_recid(foreign key), and details
我想为10个特定的
不同的
写一个查询,删除那些
不同的
的所有行,只删除最近的行


任何人都有建议。

你需要在加入队伍中多加一个任期#3。
DECLARE @MyTable TABLE
(
    RecID           INT IDENTITY(1,1) PRIMARY KEY,
    Different_RecID INT,
    Create_Date     DATETIME
);

INSERT  @MyTable (Different_Recid, Create_Date)
SELECT  1, '20130101' UNION ALL 
SELECT  1, '20130102' UNION ALL 
SELECT  1, '20130103' UNION ALL 

SELECT  2, '20130211' UNION ALL 
SELECT  2, '20130212' UNION ALL 

SELECT  3, '20130102' UNION ALL 
SELECT  3, '20130103';

DECLARE @RowsToDelete TABLE(ID INT PRIMARY KEY);
INSERT  @RowsToDelete VALUES (1);
INSERT  @RowsToDelete VALUES (2);

DELETE  [Target]
-- OUTPUT   deleted.* -- <-- Uncomment this line to see deleted rows
FROM
(
    SELECT  *
    FROM
    (
        SELECT  ROW_NUMBER() OVER(PARTITION BY x.Different_RecID ORDER BY x.Create_Date DESC) RowNum, x.*
        FROM    @MyTable x
        WHERE   EXISTS 
        (   
            SELECT  *
            FROM    @RowsToDelete d 
            WHERE   x.Different_RecID = d.ID
        )
    ) src
    WHERE src.RowNum > 1
) AS [Target];
SELECT * FROM @MyTable;
/*
RecID Different_RecID Create_Date
----- --------------- -----------
3     1               2013-01-03
5     2               2013-02-12
6     3               2013-01-02
7     3               2013-01-03
*/