我有一個名為“main”的表,它有 4 列,ID、名稱、DateID 和 Sign。
如果在某個 DateID 中有兩次相同的 ID 記錄,我想創建一個查詢,該查詢將洗掉該表中的條目。
我有搜索前 3 周的 where 子句
where DateID =((SELECT MAX( DateID)
WHERE DateID < ( SELECT MAX( DateID )-3))
例如,我正在使用的資料集:
| ID | 姓名 | 日期ID | 符號 |
|---|---|---|---|
| 12345 | 保羅 | 1915年 | 向上 |
| 23658 | 丹尼 | 1915年 | 向下 |
| 37868 | 杰克 | 1916年 | 向上 |
| 37542 | 艾麗 | 1917年 | 向上 |
| 12345 | 保羅 | 1917年 | 向下 |
| 87456 | 約翰 | 1918年 | 向上 |
| 78563 | 盧克 | 1919年 | 向上 |
| 23658 | 丹尼 | 1920 | 向上 |
在上述情況下,需要洗掉 ID 12345 的兩個條目。但是 ID 23658 的條目需要保留為 DateID > 3
這怎么可能?
uj5u.com熱心網友回復:
您可以為此使用視窗函式。
這不是很清楚,但它似乎LAG和有條件的COUNT應該符合你的需要。
DELETE t
FROM (
SELECT *,
CountWithinDate = COUNT(CASE WHEN t.PrevDate >= t.DateId - 3 THEN 1 END) OVER (PARTITION BY t.id)
FROM (
SELECT *,
PrevDate = LAG(t.DateID) OVER (PARTITION BY t.id ORDER BY t.DateID)
FROM YourTable t
) t
) t
WHERE CountWithinDate > 0;
db<>小提琴
注意不需要重新加入表,可以直接從t派生表中洗掉。
uj5u.com熱心網友回復:
希望這有效:
DELETE FROM test_tbl
WHERE id IN (
SELECT T1.id
FROM test_tbl T1
WHERE EXISTS (SELECT 1 FROM test_tbl T2 WHERE T1.id = T2.id AND ABS(T2.dateid - T1.dateid) < 3 AND T1.dateid <> T2.dateid)
)
如果您需要更多的資料處理邏輯,我建議使用存盤程序。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/467744.html
上一篇:SAS中的條件問題
下一篇:組合左連接和選擇的語法錯誤
