-- ============================================================================ -- 计提参数查询留档(M1 参数体系) -- -- 时点化取值核心规则:按 (param_id, dimension_value) 分组,取 -- effective_date <= :biz_date 的 ORDER BY effective_date DESC, id DESC 首条 -- (同日多次变更取最新一条,不设唯一键以保证完整留痕)。 -- 参数总量约百行级,全量快照一次取回后在应用层按覆盖链 -- (角色维度 > 产品类别维度 > 默认行)选择,无需在 SQL 层做维度回退。 -- ============================================================================ -- 1. 全量快照:某业务日期下每个(参数, 维度值)的最新生效值 -- 窗口函数版(MySQL 8.0+),供 param_repository.resolve_values 使用 SELECT t.param_code, t.dimension_value, t.value_text, t.effective_date FROM ( SELECT pd.param_code, pv.dimension_value, pv.value_text, pv.effective_date, ROW_NUMBER() OVER ( PARTITION BY pv.param_id, pv.dimension_value ORDER BY pv.effective_date DESC, pv.id DESC ) AS rn FROM param_values pv JOIN param_definitions pd ON pd.id = pv.param_id WHERE pv.effective_date <= :biz_date AND pd.status = 1 ) t WHERE t.rn = 1; -- 2. 单参数版本历史(变更留痕,供参数历史接口与导出) SELECT pv.effective_date, pv.dimension_value, pv.old_value_text, pv.value_text, b.version_no, b.operator_name, b.create_time FROM param_values pv JOIN param_change_batches b ON b.id = pv.batch_id WHERE pv.param_id = :param_id ORDER BY pv.effective_date DESC, pv.id DESC; -- 3. 区间变更条目(对比视图辅助:应用层对两日期各执行查询 1 后逐项 diff, -- 本查询列出区间内实际发生过的变更,供变更记录分页与导出) SELECT pd.param_code, pd.param_name, pv.dimension_value, pv.old_value_text, pv.value_text, pv.effective_date, b.version_no, b.operator_name FROM param_values pv JOIN param_definitions pd ON pd.id = pv.param_id JOIN param_change_batches b ON b.id = pv.batch_id WHERE pv.effective_date > :from_date AND pv.effective_date <= :to_date ORDER BY pv.effective_date, pv.id;