如何在以下行的范围内找到最大值-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')
)