删除旧记录并保留10个最新的sql compact
我在MS SQL 2008中使用了一个sql压缩数据库(sdf)。 在表'Job'中,每个id都有多个作业。 有一个系统定期向表中添加作业。删除旧记录并保留10个最新的sql compact
我想保持10个最新记录通过他们每个ID秩序“datecompleted” 和删除的记录
我怎样才能构建我的查询休息吗?使用#temp表和光标
那么这即将来临的圣诞节,所以这里是我送给你的礼物,那证明什么,我相信那就是你正在努力实现的一个示例脚本。不,我没有一个大的白色蓬松的胡须;-)
CREATE TABLE TestJobSetTable
(
ID INT IDENTITY(1,1) not null PRIMARY KEY,
JobID INT not null,
DateCompleted DATETIME not null
);
--Create some test data
DECLARE @iX INT;
SET @iX = 0
WHILE(@iX < 15)
BEGIN
INSERT INTO TestJobSetTable(JobID,DateCompleted) VALUES(1,getDate())
INSERT INTO TestJobSetTable(JobID,DateCompleted) VALUES(34,getDate())
SET @iX = @iX + 1;
WAITFOR DELAY '00:00:0:01'
END
--Create some more test data, for when there may be job groups with less than 10 records.
SET @iX = 0
WHILE(@iX < 6)
BEGIN
INSERT INTO TestJobSetTable(JobID,DateCompleted) VALUES(23,getDate())
SET @iX = @iX + 1;
WAITFOR DELAY '00:00:0:01'
END
--Review the data set
SELECT * FROM TestJobSetTable;
--Apply the deletion to the remainder of the data set.
WITH TenMostRecentCompletedJobs AS
(
SELECT ID, JobID, DateCompleted
FROM TestJobSetTable A
WHERE ID in
(
SELECT TOP 10 ID
FROM TestJobSetTable
WHERE JobID = A.JobID
ORDER BY DateCompleted DESC
)
)
--SELECT * FROM TenMostRecentCompletedJobs ORDER BY JobID,DateCompleted desc;
DELETE FROM TestJobSetTable
WHERE ID NOT IN(SELECT ID FROM TenMostRecentCompletedJobs)
--Now only data of interest remains
SELECT * FROM TestJobSetTable
DROP TABLE TestJobSetTable;
如何像失败:
DELETE FROM
Job
WHERE NOT
id IN (
SELECT TOP 10 id
FROM Job
ORDER BY datecompleted)
这是假设你使用3.5,因为嵌套的SELECT仅在这个版或更高版本可用。
我没有正确地阅读这个问题。我怀疑CTE的更多内容会使用类似的逻辑来解决问题。你想建立一个查询来标识你想保留的记录,作为你的出发点。
这个id不是唯一的,所以id1可以有30个作业,id2可以有40个作业等等,所以你的查询只会保留前10条记录。但我想保留10个工作id1和10个工作id2等 – Kiddo 2010-11-25 06:35:25
我的误解。由于不支持临时表,因此您可能必须在作业表上为其自身添加一系列JOIN,或者使用CTE进行操作。 – 2010-11-25 06:37:52
临时表和游标在SQL Compact中不受支持。 SQL Compact与SQL Server之间的区别可以在这里找到:http://technet.microsoft.com/en-us/library/bb896140.aspx – 2010-11-25 06:43:28