【问题标题】:Replicate values across a grouping set with multiple groups within the grouping set by date按日期在分组集中复制具有多个组的分组集中的值
【发布时间】:2020-02-02 16:35:22
【问题描述】:

以下是示例源数据:

预期输出如下:

数据基本上按 A_ID、B_ID、C_ID 分组,然后在每次 GR_CNT 为 NULL 时,为上述行复制 GR_MATERIAL 和 GR_SERIAL 的相应值。 LAST_DT 和 DATE_TIME 按升序排列。
以下是我尝试过的查询,但我不确定如何获取位于数据中间的 GR_MATERIAL 和 GR_SERIAL 的值。

sel a.*,coalesce(max(GR_MATERIAL) over (partition by A_ID, B_ID, C_ID order by LAST_DT,DATE_TIME), -1) as col2,<br>
coalesce(max(GR_SERIAL) over (partition by A_ID, B_ID, C_ID order by LAST_DT,DATE_TIME), -1) as col3<br>
from table a<br>

为 GR_MATERIAL 和 GR_SERIAL 创建两个具有所需值的新列也可以。

我正在使用 TD16

【问题讨论】:

    标签: sql teradata teradata-sql-assistant


    【解决方案1】:

    如果没有 ROWS,您当前的查询会返回所有行的 Max,即 Group Max

    你可能想要

    LAST_VALUE(GR_MATERIAL IGNORE NULLS) 
    over (partition by A_ID, B_ID, C_ID 
          order by LAST_DT DESC, DATE_TIME DESC)
    

    这会将 Null 替换为之前的值。

    【讨论】:

      猜你喜欢
      • 2021-01-15
      • 1970-01-01
      • 2019-04-03
      • 1970-01-01
      • 2016-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多