迁移新ERP时筛选18个月无活动供应商账户的查询条件设置问题
问题结论
你现有查询逻辑存在漏洞,必须新增校验规则确认目标供应商不存在2020年5月及之后的已过账发票交易,否则会筛出不符合要求的供应商。
现有查询的核心问题
你当前用左连接加where 已过账发票日期 < '2020-05-01'的逻辑有两个明显错误:
- 若某供应商同时存在2020年5月前、后的发票记录,现有条件只会过滤出该供应商符合日期要求的历史记录,最终仍会把该供应商纳入结果清单,完全不符合「18个月无交易」的清理规则
- 从未产生过任何交易的供应商,左连接后付款历史表的所有字段为NULL,无法满足
日期 < '2020-05-01'的条件,会被直接排除出结果,而这类供应商本就属于可清理的范围
正确实现方案
推荐两种可直接落地的写法,任选其一即可:
方案1:用NOT EXISTS校验(性能更优,适配大表场景)
SELECT vm.* FROM Vendor_Master vm WHERE NOT EXISTS ( SELECT 1 FROM Posted_Invoice_Payments_History piph WHERE piph.vendor_id = vm.vendor_id AND piph.posted_invoice_date >= '2020-05-01' )
该逻辑会直接排除所有存在2020年5月及之后交易的供应商,同时自动保留从未有过交易的供应商。
方案2:用分组聚合判断最大交易日期
SELECT vm.vendor_id, vm.vendor_name, MAX(piph.posted_invoice_date) last_trade_date FROM Vendor_Master vm LEFT JOIN Posted_Invoice_Payments_History piph ON vm.vendor_id = piph.vendor_id GROUP BY vm.vendor_id, vm.vendor_name HAVING MAX(piph.posted_invoice_date) < '2020-05-01' OR MAX(piph.posted_invoice_date) IS NULL
该逻辑通过统计每个供应商的最晚交易日期,明确筛选出最晚交易早于2020年5月、或者无任何交易记录的供应商。
内容的提问来源于stack exchange,提问作者Louis Bustos
相关产品推荐
相关产品推荐

