使用Teradata SQLquery限制结果

使用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

以下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 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