leading-project/finereport/历史数据/今日收费历史数据保留.sql
2024-11-27 11:07:58 +08:00

76 lines
2.8 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
LEFT(CURRENT_DATE,10) 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 metric_value
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 LEFT(dt,10) 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 LEFT(dt,10) = '${s_ym}'
)t
WHERE t.rk = 1
AND hour(extract_date) >= 7
AND hour(extract_date) <= 24
)
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