求某一数据同比增速以及处理切割数据

紧跟上一篇记录,在本次开发中需要处理四张表,对其中一个EV同比增速情况进行计算。其中两张表的时间周期以“22Q1”/"22Q2"/"22Q3"/"22Y"的形式展示。如图:

我的理解是在报告周期上把数据切割开,形成年度和周期两个字段,和另外两张表一个形式,如图:

接下来是实现sql:

CREATE OR REPLACE VIEW "DATAHUB"."CONSENSUS_FORECAST_US" AS
WITH t1 AS (
SELECT
TICKER_AND_EXCH_CODE
,SHORT_NAME
,CASE 
    WHEN SUBSTR(BEST_FPERIOD_OVERRIDE, -1, 1) = 'Y' THEN SUBSTR(BEST_FPERIOD_OVERRIDE, 1,2)
    WHEN SUBSTR(BEST_FPERIOD_OVERRIDE, -2, 1) LIKE 'Q%' THEN SUBSTR(BEST_FPERIOD_OVERRIDE, 1,2)
    END AS EQY_FUND_YEAR                       ----年度
,CASE 
    WHEN SUBSTR(BEST_FPERIOD_OVERRIDE, -1, 1) = 'Y' THEN SUBSTR(BEST_FPERIOD_OVERRIDE, -1)
    WHEN SUBSTR(BEST_FPERIOD_OVERRIDE, -2, 2) LIKE 'Q%' THEN SUBSTR(BEST_FPERIOD_OVERRIDE, -2)
    END AS FUND_PER                            ----财报周期
,BEST_SALES
,BEST_SALES_YOY_GTH
,BEST_NET_INCOME
,BEST_NET_YOY_GTH
,BEST_EPS
,BEST_EPS_YOY_GTH
,BEST_EV
,BEST_EV_YOY
,BEST_BPS
,BEST_BPS_YOY_GTH
,BEST_PE_RATIO
,BEST_PX_BPS_RATIO
,SRCSYS
,DOWNLOADTIME
,TX_DATE
FROM
    USER.CONSENSUS_FORECAST_US_STOCK
),
t2 AS (
    SELECT *
    FROM t1
    WHERE EQY_FUND_YEAR IN (SELECT MAX(EQY_FUND_YEAR) FROM t1)
),                                            ---获取最新一年数据
t3 AS (
    SELECT *
    FROM t1
    WHERE EQY_FUND_YEAR IN (SELECT MAX(EQY_FUND_YEAR) - 1 FROM t1)
)                                             ---获取上一年数据
SELECT 
t2.TICKER_AND_EXCH_CODE,
t2.SHORT_NAME,
t2.EQY_FUND_YEAR,
t2.FUND_PER,
t2.BEST_SALES,
t2.BEST_SALES_YOY_GTH,
t2.BEST_NET_INCOME,
t2.BEST_NET_YOY_GTH,
t2.BEST_EPS,
t2.BEST_EPS_YOY_GTH,
t2.BEST_EV,
CASE 
    WHEN t3.BEST_EV > 0 THEN 
        CONCAT( ROUND(((t2.BEST_EV - t3.BEST_EV) / t3.BEST_EV),6)  * 100, '%' ) 
    ELSE 
        '同期没有数据'
    END AS BEST_EV_YOY,     ---同比=(今年同期-去年同期)/去年同期,这里保留需求方要求的百分号后面四位小数
t2.BEST_BPS,
t2.BEST_BPS_YOY_GTH,
t2.BEST_PE_RATIO,
t2.BEST_PX_BPS_RATIO,
t2.SRCSYS,
t2.DOWNLOADTIME,
t2.TX_DATE
FROM t2 
LEFT JOIN t3 
    ON t2.TICKER_AND_EXCH_CODE = t3.TICKER_AND_EXCH_CODE
    AND t2.FUND_PER = t3.FUND_PER 
    AND t2.EQY_FUND_YEAR = t3.EQY_FUND_YEAR + 1;

另外,我的最终结果是以Oracle视图形式呈现,所以前面加了个创建视图表语句。给到的样例数据只有一年,所以结果没有显示增速信息。

另一张表中我造了一条数据,就可以正常体现结果

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值