使用row_number对txn_dt排序并按acct_no分组,然后对排序后的表自关联,row_number差值为1,acct_no相同,根据row_number大的结果得到end_dt,没有对应值的,取默认值
with t as (
select *,row_number() over(partition by acct_no order by txn_dt) as rid from t03_acctno_bal
)
select a.acct_no,a.txn_dt as start_dt,isnull(b.txn_dt,'30000101') as end_dt,a.current_bal
from t a
left join t b on a.acct_no=b.acct_no and a.rid=b.rid-1
根据账号和交易时间做自身关联查询