【问题标题】:How can we implement First() function used in Informatica in SQL?我们如何在 SQL 中实现 Informatica 中使用的 First() 函数?
【发布时间】:2020-09-27 04:58:17
【问题描述】:

我在 Informatica 中有一个聚合转换,其中 Description1 列 = First(Description)。 我想在 SQL 查询中实现相同的功能。谁能建议如何做到这一点? 样本数据集 表名-ABC

Name               Expression
ID                 ID
DESCRIPTION 
DESCRIPTION1       FIRST(DESCRIPTION1)
INSERT_DATE 
INSERT_DATE1       FIRST(INSERT_DATE)
RANK    
RANK1              FIRST(RANK)

【问题讨论】:

  • 请提供您的表名和列名
  • 表名是Router_Transform,列名是Description1,它等于Informatica聚合转换中的First(Description)。我想写一个允许我使用First()功能的sql查询功能。
  • 该表中有多少列以及在聚合器转换中分组了多少列?
  • 此表共有 11 列,我们有 id 列,我们将其用作按条件分组。我们基本上有 11 列按 id 值分组。
  • 好的,下面是答案

标签: sql sql-order-by window-functions informatica sql-limit


【解决方案1】:

请使用以下查询,

select max(Description1) from Router_Transform;

如果您在映射中使用排序器转换,请使用order by 子句,

    select max(Description1) from Router_Transform order by column_name;

【讨论】:

  • 我需要第一个值而不是最大值。
  • First() 是 Informatica 中的一个聚合函数,它根据分组的端口返回端口的第一个值。
  • Informatica 将数据传递给聚合器转换,并根据您传递的排序顺序对使用 first() 函数时的第一条记录进行分组
  • 没错,聚合的时候可以有很多值,如果取第一个值提供给你。可能您可以发布您的示例数据和预期结果。可以在这方面为您提供帮助
  • 我在我的问题中提到了一个示例数据集
【解决方案2】:

如果您想要id 最小的行,那么您可以对结果集进行排序并仅保留一行。在标准 SQL 中,您通常会为此使用行限制子句:

select t.*
from mytable
order by id
fetch first row only

请注意,所有数据库都支持这种语法(但几乎所有数据库都有替代方法)。

另一方面,如果你想为每一行添加更多的列来显示每列的“第一个”值,那么你可以使用窗口函数first_value()

select
    t.*,
    first_value(description) over(order by id) description1,
    first_value(insert_date) over(order by id) insert_date1,
    first_value(rank)        over(order by id) rank1
from mytable

【讨论】:

  • @Vilas:你有什么理由不接受这个答案吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-25
  • 2017-04-22
  • 1970-01-01
  • 2019-12-03
  • 2012-01-12
  • 1970-01-01
相关资源
最近更新 更多