第一题:
SELECT
T2.ACCT_ID , --账户号
T2.OPN_BRANCH, --开户机构
T1.ACCT_TYPE, --账户类别
T1.BAL , --账户余额
(SELECT AVG(T3.BAL) FROM ODM.T_ACCT T3 , --账户基本表
ODM.T_ACCT_INFO T4 --账户信息表
WHERE T3.ACC_ID = T4.ACCT_ID --账户号关联
AND T2.OPN_BRANCH = T4.OPN_BRANCH --同一开户机构
AND T1.ACCT_TYPE = T3.ACCT_TYPE --同一账户性质
AND T4.ACCT_STS = '01' --账户状态正常
) --平均余额
FROM
ODM.T_ACCT T1 , --账户基本表
ODM.T_ACCT_INFO T2 --账户信息表
WHERE T1.ACC_ID = T2.ACCT_ID --账户号关联
第二题:交易日期的参数可以放到两个子查询里,这样更合理些
SELECT T3.ACCT_ID , T3.TRANS_BAL,AVG(T2.TRANS_BAL) OVER(PARTITON BY T2.ACCT_ID)
FROM
(SELECT
T1.TRANS_NO , --主机流水号
T1.ACCT_ID , --交易账号
T1.TRANS_BAL, --交易金额
T1.TRANS_TIME,--交易时间
ROW_NUMBER() OVER(PARTITION BY T1.ACCT_ID , T1.TRANS_TIME --同一账户,同一天交易
ORDER BY T1.TRANS_NO ASC --按照交易流水号排序
) AS CN --获取每个账户交易的序号
FROM ODM.T_TRANS_INFO T1 --交易信息表
WHERE T1.TRANS_TIME = @交易日期
) T2 --所有交易,
(SELECT
T1.TRANS_NO , --主机流水号
T1.ACCT_ID , --交易账号
T1.TRANS_BAL, --交易金额
T1.TRANS_TIME,--交易时间
ROW_NUMBER() OVER(PARTITION BY T1.ACCT_ID , T1.TRANS_TIME --同一账户,同一天交易
ORDER BY T1.TRANS_NO ASC --按照交易流水号排序
) AS CN --获取每个账户交易的序号
FROM ODM.T_TRANS_INFO T1 --交易信息表
WHERE T1.TRANS_TIME = @交易日期
) T3 --当前查询交易
WHERE T2.ACCT_ID = T3.ACCT_ID --账户相同
AND T2.TRANS_TIME = T3.TRANS_TIME --交易时间
AND T3.CN >= T2.CN - 2 --当前笔数的前两笔
AND T3.CN <= T2.CN + 2 --当前笔数的后两笔为范围
AND T3.TRANS_NO = @交易流水