在按日期设置的分组中跨具有多个组的分组集复制值
Replicate values across a grouping set with multiple groups within the grouping set by date
下面是示例源数据:
预期输出如下:
数据基本上按 A_ID、B_ID、C_ID 分组,然后在其中每次 GR_CNT 为 NULL 时 [=33= 的对应值] 和 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
没有 ROWS 您当前的查询 returns 所有行的最大值,即 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 替换为以前的值。
下面是示例源数据:
预期输出如下:
数据基本上按 A_ID、B_ID、C_ID 分组,然后在其中每次 GR_CNT 为 NULL 时 [=33= 的对应值] 和 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
没有 ROWS 您当前的查询 returns 所有行的最大值,即 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 替换为以前的值。