- business_roles/param_definitions/param_change_batches/param_values 四表 + 种子(3 内置岗位/16 参数定义/19 版本条目/初始批次 P20260101-00) - 双轨迁移:Alembic bfbda9c3191d + db/migration/V3 导出 + init-dev.sql 同步(schema_sync 校验通过) - 参数值以 Fraction 可解析字符串存储(4/360 禁 0.011111);企业户 2‰→3‰ 双种子支持按到账日回溯 Co-Authored-By: Claude Code <noreply@anthropic.com>
59 lines
2.3 KiB
SQL
59 lines
2.3 KiB
SQL
-- ============================================================================
|
||
-- 计提参数查询留档(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;
|