DROP TABLE ods_history_today_fee_save; CREATE TABLE ods_history_today_fee_save( dt VARCHAR(50) COMMENT '时间' ,extract_date VARCHAR(50) COMMENT '抽数日期' ,extract_time VARCHAR(50) COMMENT '抽数时间' ,metric_value VARCHAR(50) COMMENT '指标值' )COMMENT = '今日收费历史数据保留'; SELECT * FROM ods_history_today_fee_save; /* 总裁驾驶舱、财务看板PC端和移动端: 1、今日收费:最新拉取数据=上次拉取数据时、08:00之前数据大于50w时;推送角色 2、今日收费:最新拉取数据为空; */ INSERT INTO ods_history_today_fee_save SELECT CURRENT_DATE AS dt -- 当天 ,CURRENT_TIMESTAMP AS extract_date -- 抽数日期 ,CURRENT_TIME AS extract_time -- 抽数时间 ,sum(ifnull(pr_paid_amt,0) + ifnull(cu_paid_amt,0) + ifnull(fu_paid_amt,0))/10000 paid_amt from dws_finance_today_fees_d WHERE ParentCostCode not in ('0006','0009','0010','0011') and MiddleCostCode not in ('00080013','00080014','00080015','00080016','00080025','00080029','00080033','00080036','00080037') and commid not in(select comm_id from ods_remove_comm) ; -- 时间 上次拉取数据、当前拉取数据、8点前拉取数据 with base AS( SELECT t.dt AS dt ,t.extract_date AS extract_date ,t.extract_time AS extract_time ,t.metric_value AS metric_value ,row_number() OVER (PARTITION BY dt ORDER BY extract_date desc) as rk -- 根据抽数时间排序 FROM ( SELECT dt ,extract_date ,extract_time ,metric_value -- 如果一个小时内多次抽数的情况,取最新的 ,row_number() OVER (PARTITION BY dt,hour(extract_date) ORDER BY extract_date desc) as rk FROM ods_history_today_fee_save WHERE dt = '${s_ym}' )t WHERE t.rk = 1 ) SELECT a.dt AS dt ,a.extract_date AS extract_date ,a.extract_time AS extract_time ,hour(a.extract_date) AS extract_hour ,a.metric_value AS current_value ,coalesce(b.metric_value,0) AS last_metric_value ,CASE WHEN hour(a.extract_date) < 8 THEN a.metric_value ELSE 0 END AS before_eight ,CASE WHEN hour(a.extract_date) < 8 AND a.metric_value > 50 THEN '1' WHEN a.metric_value = b.metric_value THEN '1' WHEN hour(a.extract_date) > 8 AND coalesce(a.metric_value,0) = 0 THEN '1' ELSE '0' END AS is_exception -- 是否异常 1:是 0:否 ,CASE WHEN hour(a.extract_date) < 8 AND a.metric_value > 50 THEN '08:00之前数据大于50w' WHEN a.metric_value = b.metric_value THEN '最新数据等于上次拉取数据' WHEN hour(a.extract_date) > 8 AND coalesce(a.metric_value,0) = 0 THEN '最新拉取数据为空' ELSE '最新数据等于上次拉取数据' END AS exception_rule FROM base a LEFT JOIN base b on a.rk = b.rk - 1 ORDER BY a.extract_date