我需要洗掉一些具有相同列組合的行(ID 除外)。應保留的行是具有最大參考日期的行
ID Column1 Column2 RefDate
GUID1 34578 BRKNRI 2018-05-03
GUID2 34578 BRKNRI 2018-05-02
GUID3 12381 BRSAPR 2018-05-03
GUID4 12381 BRSAPR 2018-05-02
GUID5 12381 BRSAPR 2018-05-01
所以,查詢后的表應該是這樣的
ID Column1 Column2 RefDate
GUID1 34578 BRKNRI 2018-05-03
GUID3 12381 BRSAPR 2018-05-03
我知道下面的查詢將回傳我想要的表格,但我不知道如何洗掉“重復”條目并只留下具有最??大日期的條目。
SELECT Column1,
Column2,
max(RefDate) as MaxDate
FROM Table
GROUP BY Column1, Column2)
uj5u.com熱心網友回復:
您可以嘗試使用洗掉JOIN
DELETE t1
FROM [Table] t1
INNER JOIN (
SELECT Column1,
Column2,
max(RefDate) as MaxDate
FROM [Table]
GROUP BY Column1, Column2
) t2
ON t1.Column1 = t2.Column1
AND t1.Column2 = t2.Column2
AND t1.RefDate <> t2.MaxDate
或使用EXISTS子查詢。
DELETE t1
FROM [Table] t1
WHERE EXISTS (
SELECT 1
FROM [Table] t2
WHERE t1.Column1 = t2.Column1
AND t1.Column2 = t2.Column2
HAVING max(t2.RefDate) <> t1.RefDate
)
sqlfiddle
uj5u.com熱心網友回復:
您應該首先驗證您的選擇確實找到了您不想洗掉的那些行。如果是這種情況,您可以使用以下命令洗掉所有其他行:
DELETE FROM yourtable where id NOT IN
(SELECT id FROM
(SELECT id,
Column1,
Column2,
max(RefDate) as MaxDate
FROM yourtable
GROUP BY Column1, Column2))
uj5u.com熱心網友回復:
您可以使用 ROW_NUMBER() 根據 Column1 ,Column2 對資料進行磁區,然后過濾 ROW_NUMBER() 值大于1的資料以獲取重復記錄。
洗掉那些 idS。
DELETE from ID where id IN
(
select id FROM
(
select id, Column1 ,Column2 ,RefDate,
ROW_NUMBER() OVER( PARTITION BY Column1 ,Column2 ORDER BY Column1 ,Column2) AS temp_var
from id
) t
where t.temp_var >1 ) ;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/460334.html
