如何在以下行的范围内找到最大值-SQL Teradata
我有一张带有下列列号的桌子: 账户、有效期、有效月、金额。 对于每一行,我想找出下个月行范围内的最大值(金额)如何在以下行的范围内找到最大值-SQL Teradata,sql,date,teradata,partitioning,window-functions,Sql,Date,Teradata,Partitioning,Window Functions,我有一张带有下列列号的桌子: 账户、有效期、有效月、金额。 对于每一行,我想找出下个月行范围内的最大值(金额) account validity_date validity_month amount **required_coloum** ------- ------------- --------------- ------- ---------------- 123 15oct2019 201910 400
account validity_date validity_month amount **required_coloum**
------- ------------- --------------- ------- ----------------
123 15oct2019 201910 400 1000
123 20oct2019 201910 500 1000
123 15nov2019 201911 1000 800
123 20nov2019 201911 0 800
123 15dec2019 201912 800
当我尝试这段代码时,我在下一行中得到了值,但这不是我需要的(每个月可以有多行):
max(amount)over(按账户顺序按有效期划分)作为下一个\u max\u amount(最大金额)
account validity_date validity_month amount next_max_amount-INVALID
------- ------------- --------------- ------- ----------------------
123 15oct2019 201910 400 500
123 20oct2019 201910 500 1000
123 15nov2019 201911 1000 0
123 20nov2019 201911 0 800
123 15dec2019 201912 800
假设有效期月份为日期类型列:
select s1.account, s1.validity_date, s1.validity_month, s1.amount,
s2.amount required_column
from your_table s1
left join (select max(amount) amount, validity_month from your_table group by 2) s2
on (
to_char(s1.validity_month.'yyyymm')=to_char(add_month(s2.validity_month,1),'yyyymm')
)
假设有效期月份为日期类型列:
select s1.account, s1.validity_date, s1.validity_month, s1.amount,
s2.amount required_column
from your_table s1
left join (select max(amount) amount, validity_month from your_table group by 2) s2
on (
to_char(s1.validity_month.'yyyymm')=to_char(add_month(s2.validity_month,1),'yyyymm')
)