首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL 重複資料去重:同時間欄位保留單筆的兩種最簡方法

     編輯:關於SqlServer

場景

表 TimeAnd 中 Time 相同時,Total、Name 可能不同,需去重保留單筆。

方法一:聚合函數 + GROUP BY(適用單一數值欄位決定)

-- 保留 Total 最大
SELECT Time, MAX(Total) AS Total, Name FROM TimeAnd GROUP BY Time;

-- 保留 Total 最小
SELECT Time, MIN(Total) AS Total, Name FROM TimeAnd GROUP BY Time;

⚠️ 缺點: Name 欄位值非確定性(隨機取自分組內某列),不適用需精確保留對應 Name 的場景。

方法二:NOT EXISTS 相關子查詢(精確保留目標列)

SELECT * FROM TimeAnd A
WHERE NOT EXISTS (
    SELECT 1 FROM TimeAnd 
    WHERE A.Time = Time AND A.Total < Total
);

✅ 優點: 精確保留 Total 最大對應的完整列(含 Name)。

擴展:多欄位優先級去重

若 Total 相同,再比較 OutTotal:

SELECT * FROM TimeAnd A
WHERE NOT EXISTS (
    SELECT 1 FROM TimeAnd 
    WHERE A.Time = Time 
      AND (A.Total < Total OR (A.Total = Total AND A.OutTotal < OutTotal))
);

總結

  • 單純數值取最大/最小 → GROUP BY + MAX/MIN(簡單但非確定性)
  • 需精確保留完整列對應關係 → NOT EXISTS 相關子查詢(標準解法)
  • 多層級優先級 → 複合條件 NOT EXISTS
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved