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

Python/Alteryx:满足特定条件时删除行的技术实现需求

数据库调整后数据清理解决方案

一、SQL 通用实现方案

核心逻辑

先找出所有带Adj的月份,提取对应的基础月份并转换成数字序号,定位最大的调整月份序号。之后删掉所有不带Adj、且月份序号小于等于这个最大值的行——自动实现“有Feb Adj就删Jan和Feb的未调整行,有Jan Adj就删Jan的未调整行”的需求,同时保留所有Adj行和调整月份之后的未调整行。

具体代码

-- 先找出所有调整月份的序号,再取最大的那个
WITH adj_months AS (
    SELECT 
        LEFT(Month, CHARINDEX(' ', Month) - 1) AS base_month,
        CASE LEFT(Month, 3)
            WHEN 'Jan' THEN 1
            WHEN 'Feb' THEN 2
            WHEN 'Mar' THEN 3
            WHEN 'Apr' THEN 4
            WHEN 'May' THEN 5
            WHEN 'Jun' THEN 6
            WHEN 'Jul' THEN 7
            WHEN 'Aug' THEN 8
            WHEN 'Sep' THEN 9
            WHEN 'Oct' THEN 10
            WHEN 'Nov' THEN 11
            WHEN 'Dec' THEN 12
        END AS month_num
    FROM your_table
    WHERE Month LIKE '% Adj'
),
max_adj_month AS (
    SELECT MAX(month_num) AS max_month_num
    FROM adj_months
)
-- 删除不需要的未调整行
DELETE FROM your_table
WHERE 
    Month NOT LIKE '% Adj'
    AND 
    CASE LEFT(Month, 3)
        WHEN 'Jan' THEN 1
        WHEN 'Feb' THEN 2
        WHEN 'Mar' THEN 3
        WHEN 'Apr' THEN 4
        WHEN 'May' THEN 5
        WHEN 'Jun' THEN 6
        WHEN 'Jul' THEN 7
        WHEN 'Aug' THEN 8
        WHEN 'Sep' THEN 9
        WHEN 'Oct' THEN 10
        WHEN 'Nov' THEN 11
        WHEN 'Dec' THEN 12
    END <= (SELECT max_month_num FROM max_adj_month)
-- 没有任何Adj行的话,这条DELETE不会删任何数据

优势

不管产品类型、区域组合多复杂,也不管部分月份有没有数据,只要存在Adj行,就能精准匹配要删除的范围,完全适配你的场景。

二、Alteryx 改进工作流方案

调整后的逻辑

放弃之前“拆Adj后删N-1行”的思路,改成基于月份属性的精准筛选,步骤如下:

  • 拆分月份标识:用Text to Columns工具按空格拆分Month列,得到基础月份和是否调整两列(比如Jan Adj拆成Jan和Adj,普通Jan的是否调整为空)。
  • 生成月份序号:用Formula工具给每个基础月份分配数字序号(Jan=1,Feb=2…Dec=12),方便比较月份先后。
  • 获取最大调整月份:用Filter筛出是否调整为Adj的行,再用Summarize取月份序号的最大值,记为max_adj_num。
  • 筛选保留数据:用Join把原数据和max_adj_num关联,然后用Filter保留两类数据:
    1. 所有是否调整为Adj的行;
    2. 是否调整为空,且月份序号 > max_adj_num的行(如果没有Adj行,就保留所有数据)。
  • 清理临时字段:用Select工具删掉基础月份、是否调整等临时字段,还原原表结构。

关键节点配置

  • Formula工具生成月份序号:
    CASE [基础月份]
      WHEN "Jan" THEN 1
      WHEN "Feb" THEN 2
      WHEN "Mar" THEN 3
      WHEN "Apr" THEN 4
      WHEN "May" THEN 5
      WHEN "Jun" THEN 6
      WHEN "Jul" THEN 7
      WHEN "Aug" THEN 8
      WHEN "Sep" THEN 9
      WHEN "Oct" THEN 10
      WHEN "Nov" THEN 11
      WHEN "Dec" THEN 12
      ELSE 0
    END
    
  • Filter工具保留规则:
    ([是否调整] == "Adj") OR (IsNull([max_adj_num]) OR [月份序号] > [max_adj_num])
    

优势

不依赖行的顺序,不管产品、区域怎么组合,也不管部分月份有没有数据,都能准确筛选出要保留的内容,解决之前方案失效的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 20:55:43