从 Teradata SQL 中的前一个 Window 分区获取最后一个值

Get Last Value from Previous Window Partition in Teradata SQL

您好,我正在尝试获取上一季度末(最后一列)的值,如图所示。

对于第 2 季度第 4 个月的属性 A,它应该 return 上一季度第 3 个月的值 (30)。第 5 个月和第 6 个月也是如此。

所有没有之前季度的季度都应该 return 1。 这同样适用于其他属性。 我曾尝试使用带分区的 LAG() 和 LAST_VALUE() 函数但没有成功,因为我无法获得上一季度的结束值。

任何帮助将不胜感激。

谢谢!

嗯。 . .我认为最简单的方法是使用 join,每季度获取你想要的一行:

select t.*, coalesce(tt.value, 1) 
from t left join
     (select t.*
      from t
      qualify row_number() over (partition by quarter order by month desc) = 1
     ) tt
     on tt.quarter = t.quarter - 1;

      

假设没有遗漏月份,LAST_VALUE加上 COALESCE 是可行的方法:

coalesce(last_value(case when month in (3,6,9,12) then value end ignore nulls)
         over (partition by attribute
               order by month
               rows between unbounded preceding and 1 preceding)
        , 1)