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

在Amazon Redshift中按name列填充flag=408的前置有效值

Redshift SQL 实现分组替换flag值

需求说明

现有一张包含name、date、flag三列的表,原始数据如下:

namedateflag
One2023-07-101
one2023-07-11408
One2023-07-12408
two2023-07-100
two2023-07-110
two2023-07-12408

需要按name分组(不区分大小写),将flag=408的行替换为该分组中之前出现的非408的flag值,最终期望结果如下:

namedateflag
One2023-07-101
one2023-07-111
One2023-07-121
two2023-07-100
two2023-07-110
two2023-07-120

解决方案

以下是适配Redshift的SQL查询语句:

SELECT
    name,
    date,
    LAST_VALUE(CASE WHEN flag != 408 THEN flag END IGNORE NULLS) 
        OVER (
            PARTITION BY LOWER(name) 
            ORDER BY date 
            ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
        ) AS flag
FROM your_table_name;

语句解释

  1. LOWER(name)分组:将name统一转为小写,确保One和one被归为同一分组,满足大小写不敏感的分组需求。
  2. CASE WHEN flag !=408 THEN flag END:将flag=408的行转为NULL,保留非408的原始flag值。
  3. LAST_VALUE(...) IGNORE NULLS:在每个分组内按日期顺序,取当前行及之前所有行中最后一个非NULL的flag值,自动填充flag=408对应的位置。
  4. 窗口范围ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW:限定只取当前行之前(包括当前行)的数据,确保只使用"之前出现的"值进行填充。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 10:02:42