You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dremio环境下每日筛选历史排除账户的营销短信SQL方案问询

Dremio 环境下的每日营销账户选择方案

核心思路

通过窗口函数给账户分配排序序号,结合日期计算当日需排除的账户数量,全程使用视图实现每日自动筛选符合条件的账户,适配Dremio不支持临时表和递归CTE的限制。

分步实现

假设原始业务表名为 customer_purchases,包含 PURCHASE_DATE(交易日期)和 ACCOUNT_NUMBER(账户号)两列。

  1. 生成去重排序的账户列表
    创建视图存储所有唯一账户,并按账户号排序,作为候选池:

    CREATE VIEW sorted_accounts AS
    SELECT DISTINCT ACCOUNT_NUMBER
    FROM customer_purchases
    ORDER BY ACCOUNT_NUMBER;
    
  2. 给账户分配连续索引
    用窗口函数为每个账户分配从0开始的连续索引,方便后续按日期偏移筛选:

    CREATE VIEW numbered_accounts AS
    SELECT 
        ACCOUNT_NUMBER,
        ROW_NUMBER() OVER (ORDER BY ACCOUNT_NUMBER) - 1 AS account_idx
    FROM sorted_accounts;
    
  3. 计算当日与首日的间隔天数
    以表中最早的交易日期作为任务首日,计算当日距离首日的天数N(即需排除的账户数量):

    CREATE VIEW date_calculation AS
    SELECT 
        (CURRENT_DATE - MIN(PURCHASE_DATE)) AS days_since_start
    FROM customer_purchases;
    

    若需指定固定首日(而非表中最早交易日期),可将 MIN(PURCHASE_DATE) 替换为固定日期,例如 DATE '2024-01-01'。

  4. 每日筛选目标账户
    结合间隔天数N,选择索引等于N的账户(自动排除前N天已选中的N个账户);若账户数量不足,通过取模运算实现循环筛选:

    CREATE VIEW daily_marketing_account AS
    SELECT na.ACCOUNT_NUMBER
    FROM numbered_accounts na
    CROSS JOIN date_calculation dc
    CROSS JOIN (SELECT COUNT(*) AS total_accounts FROM sorted_accounts) ta
    WHERE na.account_idx = dc.days_since_start % ta.total_accounts;
    

使用说明

每日直接查询 daily_marketing_account 视图,即可获取当日需发送营销短信的账户。

内容的提问来源于stack exchange,提问作者Lasha Dolenjashvili

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 06:25:21