Sql server SQL将44个外键的500个最新项保存在一个表中
我有一个包含以下3列的表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
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
*/