簡體   English   中英

SQL 按多個字段分組獲得第一次出現

[英]SQL group by multiple fields get first occurrence

我有這張表(sales_lines):

id  sale_id  sale_seq_id   other_fields
----------------------------------------
1     1       1
2     1       2
3     2       1 
4     3       1
5     3       2

但是這個表可以有一個重復的 sale_seq_id (是的,這是一個錯誤)。 像這樣:

id  sale_id  sale_seq_id   other_fields
----------------------------------------
1     1       1
2     1       2
3     1       2
4     2       1 
5     3       1
6     3       1
7     3       2

第 3 行和第 6 行是錯誤,所以我應該丟棄它們。

我該怎么做?

要刪除錯誤的記錄,請執行

delete from sales_lines
where id not in 
(
  select min(id)
  from sales_lines
  group by sale_id, sale_seq_id
)

要刪除正確的數據,請執行

select min(id), sale_id, sale_seq_id
from sales_lines
group by sale_id, sale_seq_id

我會使用相關的子查詢:

select sl.*
from sales_line sl
where sl.id = (select min(sl1.id) 
               from sales_line sl1 
               where sl1.sale_id = sl.sale_id and 
                     sl1.sale_seq_id = sl.sale_seq_id
              );

如果您的 DBMS 支持 window function 那么您可以:

select sl.*
from (select sl.*, 
             row_number() over (partition by sl.sale_id, sl.sale_seq_id order by sl.id) as seq
      from sales_line sl
) sl
where seq = 1;

通過這種方式,您也將獲得其他字段的完整行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM