[英]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.