使用Teradata SQLquery限制结果
以下SQL导致结果下降,因为最低FYPD在上一个财政年度。PS_DEPR_RPT表包含每个资产的一行,因为有12个会计期间 下面查询的目的是返回资产ID。如果资产未在上一期间添加,则最小值非常有效使用Teradata SQLquery限制结果,sql,teradata,Sql,Teradata,以下SQL导致结果下降,因为最低FYPD在上一个财政年度。PS_DEPR_RPT表包含每个资产的一行,因为有12个会计期间 下面查询的目的是返回资产ID。如果资产未在上一期间添加,则最小值非常有效 select business_unit, asset_id, book, min((fiscal_year * 100) + accounting_period) as FYPD from psfs.PS_DEPR_RPT pdr where book = 'PERFORM' having
select business_unit, asset_id, book,
min((fiscal_year * 100) + accounting_period) as FYPD
from psfs.PS_DEPR_RPT pdr
where book = 'PERFORM'
having FYPD between 201901 and 201912
group by 1,2,3
对于如何从本表中返回19财年和第1至12期的单一资产id,如有任何建议,将不胜感激。看起来不太难,但我今天没能挺过去。感谢您的帮助…考虑使用条件聚合跨多个会计年度期间进行计算(将
WHERE
条件移动到CASE
语句):
如果您需要所有FYPD列的非空最小值,请根据CTE语法的结果运行COALESCE
刮胡子。样本数据和期望的结果确实会有帮助。是的,很难说出你在寻找什么。也许这就像在WHERE子句中过滤一样简单,而不是在201901和201912之间使用
WHERE book='PERFORM'和((会计年度*100)+会计期间)
@gordon linoff………你是对的。我本来可以把我想要的工作做得更好的……@fred…………谢谢你的反馈。我把它弄得比我需要的困难多了。我只是删除了会计期间标准并更改了会计年度标准=2019年,得到了我需要的结果,,,,,,,谢谢……。我通过删除会计期间标准并仅使用会计年度标准简化了它。有时候,我觉得事情比实际情况更难…有时候简单一些更好…至少在这种情况下。再次感谢
select business_unit, asset_id, book,
min(case
when FYPD between 201701 and 201712
then (fiscal_year * 100) + accounting_period
else NULL
end) as FYPD_17,
min(case
when FYPD between 201801 and 201812
then (fiscal_year * 100) + accounting_period
else NULL
end) as FYPD_18,
min(case
when FYPD between 201901 and 201912
then (fiscal_year * 100) + accounting_period
else NULL
end) as FYPD_19
from psfs.PS_DEPR_RPT pdr
where book = 'PERFORM'
group by 1, 2, 3
with cte as (
-- ...above query...
)
select business_unit, asset_id, book,
coalesce(FYPD_19, FYPD_18, FYPD_17) as FYPD_min
from cte