已经搞定了,目前做法是关联了一次当前查询日期的前一个日期
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)