回答:已经搞定了,目前做法是关联了一次当前查询日期的前一个日期SELECT a."业务日期" , a."分公司", a."物料名", a."物料编码", a."批次号", coalesce(qc."期初结存量",0) AS "期初结存量", a."实入主数量", a."实出主数量",-- a."主结存量", coalesce(qc."期初结存量",0)+a."实入主数量" -a."实出主数量" AS "期末结存量"-- ,-- sum(a."主结存量") over(partition BY substring(a."业务日期",1,7),a."分公司",a."物料名",a."物料编码",a."批次号" order by substring(a."业务日期",1,7),a."分公司",a."物料名", a."物料编码",a."批次号" desc rows between unbounded preceding and current row) as "上月结存"FROM aldate a LEFT JOIN (SELECT to_date("业务日期",'YYYY-MM')::timestamp+ '1 month' AS "日期区间", "分公司", "物料名", "物料编码", "批次号", "主结存量" AS "期初结存量" FROM aldate WHERE "物料编码" = '0102737' -- AND substring(a."业务日期",1,7) <='2023-10' ORDER BY substring("业务日期",1,7) ) qc ON to_char(qc."日期区间",'YYYY-MM')= a."业务日期" AND qc."分公司"=a."分公司" AND qc."物料名"=a."物料名" AND qc."物料编码"=a."物料编码" AND qc."批次号"=a."批次号" --WHERE-- a."物料编码" = '0102737'ORDER BY substring(a."业务日期",1,7)