[英]SQL Multi Conditional CASE WHEN issues [Part 2 - logic adjustments]
對於我昨天發布的問題,我有一個后續問題。 今天,需要對邏輯進行更改。 SQL 多條件 CASE WHEN 問題
示例數據表在這篇文章的底部。 原始代碼是圍繞以下邏輯編寫的:
感謝用戶 Gordon Linoff,他提供了以下完美運行的代碼:
select o.*
from (select o.*,
row_number() over (partition by order_number
order by (case when payment_method = 'Credit Card' then 1 else 2 end),
order_date desc
) as seqnum
from orders o
) o
where seqnum = 1;
對邏輯中的要求進行了更新,已擴展為以下內容:
這可以通過修改 Gordon 代碼中的 CASE WHEN 來實現嗎? 還是它需要的不僅僅是簡單的改變。
有問題的原始數據表:
訂單號 | 付款方式 | 訂購日期 |
---|---|---|
120 | 現金 | 2021 年 1 月 1 日 |
175 | 信用卡 | 2021 年 1 月 2 日 |
209 | 現金 | 01/03/2021 |
209 | 信用卡 | 2021 年 1 月 4 日 |
209 | 私人支票 | 2021 年 1 月 5 日 |
209 | 信用卡 | 2021 年 1 月 6 日 |
209 | 現金 | 2021 年 1 月 7 日 |
209 | 私人支票 | 2021 年 1 月 8 日 |
277 | 信用卡 | 2021 年 1 月 9 日 |
301 | 現金 | 2021 年 1 月 10 日 |
333 | 私人支票 | 2021 年 1 月 11 日 |
333 | 現金 | 2021 年 1 月 12 日 |
333 | 現金 | 2021 年 1 月 13 日 |
333 | 私人支票 | 2021 年 1 月 14 日 |
400 | 信用卡 | 2021 年 1 月 15 日 |
551 | 信用卡 | 2021 年 1 月 16 日 |
551 | 現金 | 2021 年 1 月 17 日 |
680 | 私人支票 | 2021 年 1 月 18 日 |
如果我正確理解了這個邏輯,它是:
您可以使用另一個子查詢和 window 函數獲取輔助信息:
select o.*
from (select o.*,
row_number() over (partition by order_number
order by (case when cnt = 2 and num_cc = 0 then order_date end) desc,
order_date asc
) as seqnum
from (select o.*,
count(*) over (partition by order_number) as cnt,
sum(case when payment_method = 'Credit Card' then 1 else 0 end) over (partition by order_number) as num_cc
from orders o
) o
) o
where seqnum = 1;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.