我在MS SQL 2008中使用了一個sql壓縮數據庫(sdf)。 在表'Job'中,每個id都有多個作業。 有一個系統定期向表中添加作業。刪除舊記錄並保留10個最新的sql compact
我想保持10個最新記錄通過他們每個ID秩序「datecompleted」 和刪除的記錄
我怎樣才能構建我的查詢休息嗎?使用#temp表和光標
我在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