从 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)
您好,我正在尝试获取上一季度末(最后一列)的值,如图所示。
对于第 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)