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

SQL查询需求:识别促销前后同店同款零件销售并生成sssp_ind标识

实现思路与SQL示例

核心逻辑

  • 先明确促销活动的时间分界点(比如促销开始/结束日期),以此划分「促销前」「促销中/后」的时间范围
  • 针对每个门店+零件的组合,判断是否同时存在促销前和促销后的销售记录
  • 将判断结果作为新增标识字段sssp_ind,关联回原销售数据表

SQL实现示例

假设你的销售表名为sales_records,包含字段:store_id(门店ID)、part_id(零件ID)、sale_date(销售日期),促销开始日期为'2024-01-01'。

方法1:窗口函数(高效适配大数据量)

WITH store_part_promo_check AS (
    SELECT 
        store_id,
        part_id,
        -- 标记该门店+零件是否有促销前记录
        MAX(CASE WHEN sale_date < '2024-01-01' THEN 1 ELSE 0 END) AS has_pre_promo,
        -- 标记该门店+零件是否有促销后记录
        MAX(CASE WHEN sale_date >= '2024-01-01' THEN 1 ELSE 0 END) AS has_post_promo
    FROM sales_records
    GROUP BY store_id, part_id
)
SELECT 
    sr.*,
    -- 同时满足促销前后都有记录则标记为1,否则为0
    CASE WHEN sp.has_pre_promo = 1 AND sp.has_post_promo = 1 THEN 1 ELSE 0 END AS sssp_ind
FROM sales_records sr
JOIN store_part_promo_check sp 
    ON sr.store_id = sp.store_id AND sr.part_id = sp.part_id;

方法2:EXISTS子查询(逻辑直观易理解)

SELECT 
    *,
    CASE 
        WHEN EXISTS (
            SELECT 1 
            FROM sales_records pre
            WHERE pre.store_id = sr.store_id 
              AND pre.part_id = sr.part_id 
              AND pre.sale_date < '2024-01-01'
        ) 
        AND EXISTS (
            SELECT 1 
            FROM sales_records post
            WHERE post.store_id = sr.store_id 
              AND post.part_id = sr.part_id 
              AND post.sale_date >= '2024-01-01'
        ) 
        THEN 1 
        ELSE 0 
    END AS sssp_ind
FROM sales_records sr;

关键说明

  • 替换示例中的'2024-01-01'为实际促销时间分界点,如果促销有明确结束日期,可调整条件为:促销前sale_date < 促销开始日,促销后sale_date > 促销结束日
  • 若只需输出符合条件的门店+零件组合,直接从store_part_promo_check中筛选has_pre_promo=1 AND has_post_promo=1的记录即可
  • 窗口函数方法仅需扫描数据表两次,在数据量较大时性能更优;子查询方法逻辑直白,适合小型数据集快速验证

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 20:23:25