2026-06-25-rating-datasync-trend.sql 4.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. -- ============================================================
  2. -- 数仓同步 + 卡片趋势 扩展建表/改表脚本(PostgreSQL)
  3. -- ⚠️ 需大侠评审确认后手动执行;执行器不主动连库执行
  4. -- 2026-06-25
  5. -- 依赖:先执行 2026-06-24-rating-recommend-rule.sql(已建 t_rating_recommend_rule)
  6. -- ============================================================
  7. -- ------------------------------------------------------------
  8. -- 1. 规则主表加列:卡片唯一ID/卡号/价值/批次号
  9. -- ------------------------------------------------------------
  10. ALTER TABLE t_rating_recommend_rule ADD COLUMN IF NOT EXISTS card_id VARCHAR(64);
  11. ALTER TABLE t_rating_recommend_rule ADD COLUMN IF NOT EXISTS card_no VARCHAR(64);
  12. ALTER TABLE t_rating_recommend_rule ADD COLUMN IF NOT EXISTS current_value NUMERIC(12,2);
  13. ALTER TABLE t_rating_recommend_rule ADD COLUMN IF NOT EXISTS value_change_pct NUMERIC(8,4);
  14. ALTER TABLE t_rating_recommend_rule ADD COLUMN IF NOT EXISTS value_min NUMERIC(12,2);
  15. ALTER TABLE t_rating_recommend_rule ADD COLUMN IF NOT EXISTS value_max NUMERIC(12,2);
  16. ALTER TABLE t_rating_recommend_rule ADD COLUMN IF NOT EXISTS batch_no VARCHAR(32);
  17. COMMENT ON COLUMN t_rating_recommend_rule.card_id IS '数仓卡片唯一ID(去重键)';
  18. COMMENT ON COLUMN t_rating_recommend_rule.card_no IS '卡号(如 066/080)';
  19. COMMENT ON COLUMN t_rating_recommend_rule.current_value IS '当前价';
  20. COMMENT ON COLUMN t_rating_recommend_rule.value_change_pct IS '涨跌幅(百分数,如 7.05 表示 +7.05%)';
  21. COMMENT ON COLUMN t_rating_recommend_rule.value_min IS '价格区间下限';
  22. COMMENT ON COLUMN t_rating_recommend_rule.value_max IS '价格区间上限';
  23. COMMENT ON COLUMN t_rating_recommend_rule.batch_no IS '同步批次号(如 2026062501)';
  24. -- 批次内卡片唯一
  25. CREATE UNIQUE INDEX IF NOT EXISTS uk_rrr_batch_card ON t_rating_recommend_rule (batch_no, card_id);
  26. -- 带批次的特征降级查询索引
  27. CREATE INDEX IF NOT EXISTS idx_rrr_batch_feature ON t_rating_recommend_rule (batch_no, series, card_set, year);
  28. -- ------------------------------------------------------------
  29. -- 2. POP 明细表(按机构,一卡多行)
  30. -- ------------------------------------------------------------
  31. CREATE TABLE IF NOT EXISTS t_rating_card_pop (
  32. id BIGSERIAL PRIMARY KEY,
  33. card_id VARCHAR(64) NOT NULL,
  34. agency VARCHAR(32) NOT NULL,
  35. grade_all INT,
  36. grade_10 INT,
  37. grade_9 INT,
  38. grade_8 INT,
  39. grade_7 INT,
  40. batch_no VARCHAR(32) NOT NULL,
  41. create_time TIMESTAMP NOT NULL DEFAULT now()
  42. );
  43. COMMENT ON TABLE t_rating_card_pop IS '卡片 POP report 明细(按评级机构 PSA/BGS/Nexphostis)';
  44. CREATE INDEX IF NOT EXISTS idx_rcp_batch_card ON t_rating_card_pop (batch_no, card_id);
  45. -- ------------------------------------------------------------
  46. -- 3. 价格历史表(增量累积,趋势曲线数据源)
  47. -- ------------------------------------------------------------
  48. CREATE TABLE IF NOT EXISTS t_rating_card_value_history (
  49. id BIGSERIAL PRIMARY KEY,
  50. card_id VARCHAR(64) NOT NULL,
  51. price NUMERIC(12,2) NOT NULL,
  52. record_date DATE NOT NULL,
  53. create_time TIMESTAMP NOT NULL DEFAULT now()
  54. );
  55. COMMENT ON TABLE t_rating_card_value_history IS '卡片价格历史(每日增量累积,趋势曲线用)';
  56. -- 同卡同日只一条,保证每日推送幂等
  57. CREATE UNIQUE INDEX IF NOT EXISTS uk_rcvh_card_date ON t_rating_card_value_history (card_id, record_date);
  58. -- ------------------------------------------------------------
  59. -- 4. 生效批次指针表(单行,记录当前对外生效的批次号)
  60. -- ------------------------------------------------------------
  61. CREATE TABLE IF NOT EXISTS t_rating_recommend_active_batch (
  62. id BIGSERIAL PRIMARY KEY,
  63. active_batch_no VARCHAR(32),
  64. update_time TIMESTAMP NOT NULL DEFAULT now()
  65. );
  66. COMMENT ON TABLE t_rating_recommend_active_batch IS '推荐规则生效批次指针(单行)';
  67. -- 初始化一行空指针(首次同步前查询将无生效批次→走兜底,符合预期)
  68. INSERT INTO t_rating_recommend_active_batch (active_batch_no)
  69. SELECT NULL
  70. WHERE NOT EXISTS (SELECT 1 FROM t_rating_recommend_active_batch);