Files
Neo-ZQYY/db/etl_feiqiu/migrations/20260407_add_visits_30d.sql
2026-04-10 06:24:13 +08:00

75 lines
3.9 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 迁移:为 dws_member_winback_index 和 dws_member_newconv_index 添加 visits_30d 字段
-- Fix-3recall 维度需要 30 天到店次数,原先用 visits_14d 近似
-- 日期2026-04-07
-- 重要:加列后必须重建所有引用这两张表的视图,否则视图看不到新列
-- 1. 加列
ALTER TABLE dws.dws_member_winback_index
ADD COLUMN IF NOT EXISTS visits_30d integer DEFAULT 0 NOT NULL;
ALTER TABLE dws.dws_member_newconv_index
ADD COLUMN IF NOT EXISTS visits_30d integer DEFAULT 0 NOT NULL;
-- 2. 重建 app schema RLS 视图DROP + CREATE因为列顺序变化导致 CREATE OR REPLACE 报错)
DROP VIEW IF EXISTS app.v_dws_member_winback_index;
CREATE VIEW app.v_dws_member_winback_index AS
SELECT winback_id, site_id, tenant_id, member_id, status, segment,
member_create_time, first_visit_time, last_visit_time, last_recharge_time,
t_v, t_r, t_a,
visits_14d, visits_30d, visits_60d, visits_total,
spend_30d, spend_180d, sv_balance, recharge_60d_amt, interval_count,
overdue_old, drop_old, recharge_old, value_old,
raw_score, display_score, last_wechat_touch_time,
calc_time, calc_version, created_at, updated_at,
overdue_cdf_p, ideal_interval_days, ideal_next_visit_date
FROM dws.dws_member_winback_index
WHERE site_id = current_setting('app.current_site_id')::bigint;
DROP VIEW IF EXISTS app.v_dws_member_newconv_index;
CREATE VIEW app.v_dws_member_newconv_index AS
SELECT newconv_id, site_id, tenant_id, member_id, status, segment,
member_create_time, first_visit_time, last_visit_time, last_recharge_time,
t_v, t_r, t_a,
visits_14d, visits_30d, visits_60d, visits_total,
spend_30d, spend_180d, sv_balance, recharge_60d_amt, interval_count,
need_new, salvage_new, recharge_new, value_new, welcome_new,
raw_score_welcome, raw_score_convert, raw_score,
display_score_welcome, display_score_convert, display_score,
last_wechat_touch_time, calc_time, calc_version, created_at, updated_at
FROM dws.dws_member_newconv_index
WHERE site_id = current_setting('app.current_site_id')::bigint;
-- 3. 重建 dws.v_member_recall_priority (UNION ALL 视图)
DROP VIEW IF EXISTS dws.v_member_recall_priority;
CREATE VIEW dws.v_member_recall_priority AS
SELECT site_id, tenant_id, member_id, 'WBI'::varchar(10) AS index_type,
status, segment, member_create_time, first_visit_time, last_visit_time, last_recharge_time,
t_v, t_r, t_a, visits_14d, visits_30d, visits_60d, visits_total,
spend_30d, spend_180d, sv_balance, recharge_60d_amt,
NULL::numeric(10,4) AS need_new, NULL::numeric(10,4) AS salvage_new,
NULL::numeric(10,4) AS recharge_new, NULL::numeric(10,4) AS value_new,
NULL::numeric(10,4) AS welcome_new,
NULL::numeric(14,6) AS raw_score_welcome, NULL::numeric(14,6) AS raw_score_convert,
raw_score,
NULL::numeric(4,2) AS display_score_welcome, NULL::numeric(4,2) AS display_score_convert,
display_score, last_wechat_touch_time, calc_time
FROM dws.dws_member_winback_index
UNION ALL
SELECT site_id, tenant_id, member_id, 'NCI'::varchar(10) AS index_type,
status, segment, member_create_time, first_visit_time, last_visit_time, last_recharge_time,
t_v, t_r, t_a, visits_14d, visits_30d, visits_60d, visits_total,
spend_30d, spend_180d, sv_balance, recharge_60d_amt,
need_new, salvage_new, recharge_new, value_new, welcome_new,
raw_score_welcome, raw_score_convert, raw_score,
display_score_welcome, display_score_convert, display_score,
last_wechat_touch_time, calc_time
FROM dws.dws_member_newconv_index;
-- 4. 回滚脚本(如需回滚,按逆序执行):
-- DROP VIEW IF EXISTS dws.v_member_recall_priority;
-- DROP VIEW IF EXISTS app.v_dws_member_newconv_index;
-- DROP VIEW IF EXISTS app.v_dws_member_winback_index;
-- ALTER TABLE dws.dws_member_winback_index DROP COLUMN IF EXISTS visits_30d;
-- ALTER TABLE dws.dws_member_newconv_index DROP COLUMN IF EXISTS visits_30d;
-- 然后重建原始视图(不含 visits_30d