我有以下要求: 我有一个像
这样的源表id | name | address | updt_date_1 | updt_date_2
1 | abc | xyz | 2000-01-01 | 1999-01-01
1 | abc | pqr | 2001-01-01 | 1999-01-01
2 | lmn | ghi | 1999-01-01 | 1999-01-01
2 | lmn | stu | 2000-01-01 | 2008-01-01
我想进入目标:
1 | abc | pqr
2 | lmn | stu
即。我希望记录在两个日期列中的最新更新日期-updt_date_1或updt_date_2
请建议如何在informatica PC中实施
答案 0 :(得分:0)
基本上我们必须确定最大更新日期1并更新日期2。然后我们必须选择它们之间的最大值。
HTH
科希克
答案 1 :(得分:0)
通过仅使用3次转换(SourceQualifier,Expression和Filter),可以有效地实现此要求。请参阅以下步骤
1)在Source Qualifier转换中使用以下SQL覆盖将两个last_updated_date字段减少为一个
SELECT
id
,name
,address
,CASE WHEN updt_date_1 > updt_date_2 THEN updt_date_1 ELSE updt_date_2 AS updt_date
FROM souce_table
ORDER BY id, updt_date DESC
现在每个id的第一行将是必需的记录。
2)使用表达式转换来标记每个id的第一行。在表达式转换中以相同的顺序使用以下端口(前缀o_表示输出端口,v_表示变量端口,i_表示输入端口)
PORT EXPRESSION
v_FIRST_ROW_FLAG - IIF(v_PREV_ID==i_id,'N','Y')
v_PREV_ID - i_id
o_FIRST_ROW_FLAG - v_FIRST_ROW_FLAG
3)接下来添加一个过滤器转换来过滤不满足以下条件的记录
IIF(o_FIRST_ROW_FLAG==Y,TRUE,FALSE)
将此过滤器转换连接到目标定义。这将为您提供预期的输出。