【问题标题】:Teradata Getting value of a variable from multiple rowsTeradata 从多行中获取变量的值
【发布时间】:2021-06-15 05:55:29
【问题描述】:

我有以下不同日期的日期和金额变量。根据最少的日期,每个 ID 只需要一行。

我拥有的数据:

 ID     Date         Code      Amt
 101    2/1/2018      A90       25
 101    2/2/2018      B90       15
 101    2/5/2018      A90       25
 102    2/1/2018      B90       10

我想要的数据:

 ID     A90_Date     B90_Date    A90_Amt  B90_Amt
 101    2/1/2018      2/2/2018       25    15
 102                  2/1/2018             10        

我的查询:

Select ID, 
    min(case when Code='A90' then Date else Null end) as A90_Date,
    min(case when Code='B90' then Date else Null end) as B90_Date,
    min(case when Code='A90' then Amt else Null end) as A90_Amt,
    min(case when Code='B90' then Amt else Null end) as B90_Amt
  from Table 
  group by 1

虽然这给了我日期和金额值,但我担心它们是否准确来自超过 1 毫米的记录。有没有一种有效的方法来使用Teradata 中的Qualify/Partition 语句提取这些数据?

提前感谢您的帮助。

【问题讨论】:

  • 为什么会出错?这是非常标准的条件聚合。

标签: case teradata min partition


【解决方案1】:

如果相同 ID/代码的金额不同,您可能会得到错误的结果。然后您必须在聚合之前过滤最早的日期,例如

with cte as
 (
   Select ID, Code, Date, Amt
   from Table 
   qualify row_number() over (partition by ID, Code order by date) = 1
 )   
Select ID, 
    min(case when Code='A90' then Date end) as A90_Date,
    min(case when Code='B90' then Date end) as B90_Date,
    min(case when Code='A90' then Amt  end) as A90_Amt,
    min(case when Code='B90' then Amt  end) as B90_Amt
from cte 
group by 1

根据您的数据,这可能更有效:

Select DISTINCT ID, 
    first_value(case when Code='A90' then Date end) over (partition by ID order by date) as A90_Date,
    first_value(case when Code='B90' then Date end) over (partition by ID order by date) as B90_Date,
    first_value(case when Code='A90' then Amt  end) over (partition by ID order by date) as A90_Amt,
    first_value(case when Code='B90' then Amt  end) over (partition by ID order by date) as B90_Amt  
from Table 
group by 1

【讨论】:

    猜你喜欢
    • 2015-07-12
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 2013-03-16
    • 2014-12-22
    相关资源
    最近更新 更多