只是爲了讓我明白這個問題。
你,如果你基於時間戳命令行集,有時複製下一個值存在的彼此,就像在第2和第3RT項以上對1分的嗎?然後你在第四和第五位加倍0,是嗎?
而你想要對應的最後一個(或序列如果有超過2)?
爲什麼你需要刪除它們?我在問,因爲除非他們佔據了這張表的大小,否則當你需要處理或顯示它們時,可能更容易將它們過濾出來,就像順序進行過濾一樣。
一個解決方案,但沒有一個很好的一個,將檢索最小時間戳上述您正在檢查當前行的時間戳,然後檢索該值,如果是相同的,不要不會返回當前行。
這裏的SQL得到的一切:
SELECT timestamp, value
FROM yourtable
下面是如何加入到獲得當前的一個高於最低時間戳:
SELECT T1.timestamp, MIN(T2.timestamp) AS next_timestamp, T1.value
FROM yourtable T1, yourtable T2
WHERE T2.timestamp > T1.timestamp
GROUP BY T1.timestamp, T1.value
(我擔心上面的查詢將是可怕的慢)
然後檢索對應於該最小時間戳的值
SELECT T3.timestamp, T3.value
FROM (
SELECT T1.timestamp, MIN(T2.timestamp) AS next_timestamp, T1.value
FROM yourtable T1, yourtable T2
WHERE T2.timestamp > T1.timestamp
GROUP BY T1.timestamp, T1.value
) T3, yourtable AS T4
WHERE T3.next_timestamp = T4.timestamp
AND T3.value <> T4.value
不幸的是,這不會產生最後一個值,因爲它需要一個下面的值來比較。一個簡單的虛擬哨兵價值(你可以在需要的情況下聯合)來處理這個問題。
下面是我測試上面的查詢對SQLite數據庫轉儲:
BEGIN TRANSACTION;
CREATE TABLE yourtable (timestamp datetime, value int);
INSERT INTO "yourtable" VALUES('2008-09-22 16:28:14.133',0);
INSERT INTO "yourtable" VALUES('2008-09-22 16:28:35.233',1);
INSERT INTO "yourtable" VALUES('2008-09-22 16:29:16.353',1);
INSERT INTO "yourtable" VALUES('2008-09-22 16:31:37.273',0);
INSERT INTO "yourtable" VALUES('2008-09-22 16:35:43.134',0);
INSERT INTO "yourtable" VALUES('2008-09-22 16:36:39.633',1);
INSERT INTO "yourtable" VALUES('2008-09-22 16:41:40.733',0);
INSERT INTO "yourtable" VALUES('2099-12-31 23:59:59.999',2);
COMMIT;
這裏是(格式化)輸出:
timestamp value
2008-09-22 16:28:14.133 0
2008-09-22 16:29:16.353 1
2008-09-22 16:35:43.134 0
2008-09-22 16:36:39.633 1
2008-09-22 16:41:40.733 0
你怎麼知道哪些是重複的值?你在桌子上有幾種主鍵? 現在我不知道如何分辨哪兩個記錄是相互關聯的。 – HLGEM 2008-09-22 20:52:28