[英]Select only one row when a certain condition is met?
ID | 姓名 | 日期 | 地位 |
---|---|---|---|
1 | 喬 | 01-22 | 得到正式認可的 |
1 | 喬 | 01-22 | 待辦的 |
2 | 賬單 | 02-22 | 得到正式認可的 |
2 | 賬單 | 02-22 | 送回 |
3 | 約翰 | 01-22 | 得到正式認可的 |
4 | 鮑勃 | 02-22 | 待辦的 |
如何每個 ID 只返回一行,優先考慮已批准?
示例:對於 ID 1,我只想要已批准的行,而不是待處理的行。
一些 ID 可能只有 1 條記錄,例如 ID 4 只有一條記錄並且處於待處理狀態。
我想要的是:如果狀態 = 相同 ID 的已批准和待處理,則保留已批准的記錄,而不是 select 待處理記錄
如果 status = pending 則保留該記錄
這將優先 select Approved,然后是 Pending,然后是其他所有內容。 如果您不想要“其他所有內容”,只需在 WHERE 子句中進行過濾。
select id,
name,
date,
status
from (
select *,
row_number() over
( partition by id
order by case when status = 'Approved' then 1
when status = 'Pending' then 2
else 3
end asc,
date
) as first_by_date_with_approved_precedence
from your_table
) tmp
where first_by_date_with_approved_precedence = 1
它也可以像下面這樣簡單(前提是狀態不是空白或空)
Select Top 1 with ties *
from YourTable
order by row_number() over (partition by id order by Status)
結果
ID NAME DATE STATUS
1 Joe 01-22 Approved
2 Bill 02-22 Approved
3 John 01-22 Approved
4 Bob 02-22 Pending
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.