Oracle SQL-create select语句,它将检索每个月的结束日期,但在月结束后的一两天比较值



假设我有一个客户表。

customer_name ||   date  ||  amount
-----------------------------------
A               31-OCT-20    100
A               01-NOV-20    100
A               02-NOV-20    200
B               31-OCT-20    300
B               01-NOV-20    325
B               02-NOV-20    350

我需要创建一个select语句,它将检索一个月的每个结束日期,并比较后一两天的金额值。如果一两天的金额与当月的结束日期不同,则显示最近更改的金额。

示例1-检索20年10月31日至20日的客户A,与20年11月1日和11月2日进行比较,输出200的金额。

示例2-检索20年10月31日至20日的客户B,与20年11月1日和11月2日进行比较,输出350的金额。

嗯。

select t.*,
(case when next_amount <> amount or next2_amount <> amount
then greatest(next_amount, next2_amount)
else next_amount
end) as imputed_next_2_days
from (select t.*,
lead(amount) over (partition by customer_name order by date) as next_amount,
lead(amount, 2) over (partition by customer_name order by date) as next2_amount
from t
) t
where date = last_day(date);

您可以使用以下查询:

Select * from
(Select t.*, 
row_number() over (partition by customer_name order by dt desc) as rn
From your_table t
Where extract(day from t.dt + 2) between 2 and 4)
Where rn = 1

提示:不要使用oracle保留关键字作为列名。(日期(

最新更新