WITH t_trade_order_info AS (
SELECT
trade_order_line_id
,trade_order_id
,end_time as order_finish_time
,buyer_id
,venture
,SUBSTR(COALESCE(KEYVALUE(features,';',':','rdt')*1000,end_time),1,13) as order_delivery_time
,SUBSTR(KEYVALUE(features,';',':','codt')*1000,1,13) as order_fulfill_time
,store_id
,item_id
,item_title
,item_url
,item_pict_url
,sku_id
,sku_info
,category_id
,quantity
FROM tdyh_dwd.dwd_lzd_trd_order_di
WHERE ds =MAX_PT('tdyh_dwd.dwd_lzd_trd_order_di')
AND delivery_status =7
AND TO_CHAR(sg_udf.epoch_to_timezone(end_time ,venture ),'yyyymmdd') = '${bizdate}'
),
t_vulcan_record AS (
SELECT
*
,ROW_NUMBER() OVER (PARTITION BY user_id,trade_order_id,trade_order_line_id,venture,COALESCE(biz_code,tool_code),ref_benefit_id
ORDER BY record_id) AS record_rank
FROM
(
SELECT
GETDATE() gmt_create
,GETDATE() as gmt_modified
,t_redeem.user_id
,t_vulcan.flow_id
,t_vulcan.record_id
,t_vulcan.benefit_id
,t_vulcan.benefit_type
,t_redeem.product_code
,t_redeem.product_sub_code
,t_redeem.biz_type
,COALESCE(t_redeem.promotion_id,t_vulcan.ref_benefit_id) AS ref_benefit_id
,COALESCE(t_redeem.collect_id,t_vulcan.ref_record_id) AS ref_record_id
,t_redeem.sales_order_id AS trade_order_id
,t_redeem.sales_order_item_id AS trade_order_line_id
,t_redeem.promotion_amount_min as amount
,t_redeem.tool_code
,t_trade.store_id
,t_trade.item_id
,t_trade.item_title
,t_trade.item_url
,t_trade.item_pict_url
,t_trade.sku_id
,t_trade.sku_info
,t_trade.category_id
,t_trade.quantity
,t_trade.order_fulfill_time
,t_trade.order_delivery_time
,t_trade.order_finish_time
,t_trade.venture
,COALESCE(t_vulcan.biz_code,t_redeem.biz_code,'unknown') as biz_code
FROM t_trade_order_info t_trade
JOIN
(
SELECT
collect_id
,promotion_id
,case when venture = 'VN' then promotion_amount_local else promotion_amount_local*100 end AS promotion_amount_min
,sales_order_id
,sales_order_item_id
,user_id
,venture
,getBenefitBizCode(feature) AS biz_code
,'' as product_code
,'' as product_sub_code
,'' as biz_type
,tool_code -- 新增字段
,ds
FROM tdyh_cdm.dwd_lzd_pro_promotion_redeem_di
WHERE ds>= TO_CHAR(DATEADD(TO_DATE('${bizdate}', 'yyyymmdd'), - 90, 'dd'), 'yyyymmdd')
AND venture IN ('TH','PH','MY','SG','ID','VN')
-- AND collect_id IS NOT NULL
) t_redeem
ON t_trade.trade_order_line_id = t_redeem.sales_order_item_id
AND t_trade.trade_order_id = t_redeem.sales_order_id
AND t_trade.venture = t_redeem.venture
AND t_trade.buyer_id = t_redeem.user_id
LEFT JOIN
(
SELECT
id as record_id
,flow_id
,biz_code
,value_type as benefit_type
,benefit_id
,ref_record_id
,ref_benefit_id
,user_id
,venture
FROM tdyh_mkt.plutus_lottery_record_history
WHERE ds>= TO_CHAR(DATEADD(TO_DATE('${bizdate}', 'yyyymmdd'), - 120, 'dd'), 'yyyymmdd')
AND venture IN ('TH','PH','MY','SG','ID','VN')
) t_vulcan
ON t_redeem.collect_id = t_vulcan.ref_record_id
AND t_redeem.venture = t_vulcan.venture
AND t_redeem.user_id = t_vulcan.user_id
) res
),
t_save_money_detail (
SELECT
gmt_create,
gmt_modified,
user_id,
flow_id,
record_id,
benefit_id,
benefit_type,
product_code,
product_sub_code,
biz_type,
ref_benefit_id,
ref_record_id,
trade_order_id,
trade_order_line_id,
amount,
store_id,
item_id,
item_title,
item_url,
item_pict_url,
sku_id,
sku_info,
category_id,
quantity,
order_fulfill_time,
order_delivery_time,
order_finish_time,
tool_code,
venture,
biz_code
FROM t_vulcan_record
WHERE record_rank = 1
)
INSERT OVERWRITE TABLE dws_lzd_ug_save_money_di PARTITION (ds='${bizdate}',venture,biz_code)
SELECT
GETDATE() gmt_create
,GETDATE() as gmt_modified
,user_id
,trade_order_id
,trade_order_line_id
,SUM(amount) AS amount
,store_id
,item_id
,item_title
,item_url
,item_pict_url
,sku_id
,sku_info
,category_id
,SUM(quantity) AS quantity
,order_fulfill_time
,order_delivery_time
,order_finish_time
,venture
,'LAZ_CLUB' AS save_biz_code
FROM t_save_money_detail
WHERE biz_code = 'LAZ_CLUB'
GROUP BY
user_id
,venture
,trade_order_id
,trade_order_line_id
,store_id
,item_id
,item_title
,item_url
,item_pict_url
,sku_id
,sku_info
,category_id
,order_fulfill_time
,order_delivery_time
,order_finish_time
UNION ALL
SELECT
GETDATE() gmt_create
,GETDATE() as gmt_modified
,user_id
,trade_order_id
,trade_order_line_id
,SUM(amount) AS amount
,store_id
,item_id
,item_title
,item_url
,item_pict_url
,sku_id
,sku_info
,category_id
,SUM(quantity) AS quantity
,order_fulfill_time
,order_delivery_time
,order_finish_time
,venture
,'FREE_SHIPPING' AS save_biz_code
FROM t_save_money_detail
WHERE tolower(tool_code) LIKE '%shippingfee%'
GROUP BY
user_id
,venture
,trade_order_id
,trade_order_line_id
,store_id
,item_id
,item_title
,item_url
,item_pict_url
,sku_id
,sku_info
,category_id
,order_fulfill_time
,order_delivery_time
,order_finish_time
UNION ALL
SELECT
GETDATE() gmt_create
,GETDATE() as gmt_modified
,user_id
,trade_order_id
,trade_order_line_id
,SUM(amount) AS amount
,store_id
,item_id
,item_title
,item_url
,item_pict_url
,sku_id
,sku_info
,category_id
,SUM(quantity) AS quantity
,order_fulfill_time
,order_delivery_time
,order_finish_time
,venture
,'LPI' AS save_biz_code
FROM t_save_money_detail
WHERE tolower(tool_code)= 'purchaseincentive'
GROUP BY
user_id
,venture
,trade_order_id
,trade_order_line_id
,store_id
,item_id
,item_title
,item_url
,item_pict_url
,sku_id
,sku_info
,category_id
,order_fulfill_time
,order_delivery_time
,order_finish_time
;
周期省钱汇总表.sql
-- 历史数据初始化
WITH t_day_change AS (
SELECT
user_id
,1 AS period_type
,TO_CHAR(sg_udf.epoch_to_timezone(order_fulfill_time ,venture),'yyyymm') AS period_id
,SUM(amount) as stat_amount
,COUNT(DISTINCT trade_order_line_id) AS stat_count -- 子订单数 : todo 修改
,venture
,'LAZ_CLUB' as biz_code
FROM tdyh_mkt.dws_lzd_ug_save_money_di
WHERE ds = '${bizdate}'
AND biz_code ='LAZ_CLUB'
GROUP BY user_id,venture,
TO_CHAR(sg_udf.epoch_to_timezone(order_fulfill_time ,venture ) ,'yyyymm')
UNION ALL
SELECT
user_id
,1 AS period_type
,TO_CHAR(sg_udf.epoch_to_timezone(order_fulfill_time ,venture),'yyyymm') AS period_id
,SUM(amount) as stat_amount
,COUNT(DISTINCT trade_order_line_id) AS stat_count -- 子订单数 : todo 修改
,venture
,'FREE_SHIPPING' as biz_code
FROM tdyh_mkt.dws_lzd_ug_save_money_di
WHERE ds = '${bizdate}'
AND biz_code ='FREE_SHIPPING'
GROUP BY user_id,venture,
TO_CHAR(sg_udf.epoch_to_timezone(order_fulfill_time ,venture ) ,'yyyymm')
UNION ALL
SELECT
user_id
,1 AS period_type
,TO_CHAR(sg_udf.epoch_to_timezone(order_fulfill_time ,venture),'yyyymm') AS period_id
,SUM(amount) as stat_amount
,COUNT(DISTINCT trade_order_line_id) AS stat_count -- 子订单数 : todo 修改
,venture
,'LPI' as biz_code
FROM tdyh_mkt.dws_lzd_ug_save_money_di
WHERE ds = '${bizdate}'
AND biz_code ='LPI'
GROUP BY user_id,venture,
TO_CHAR(sg_udf.epoch_to_timezone(order_fulfill_time ,venture ) ,'yyyymm')
) ,
t_update_all AS (
SELECT
user_id
,period_id
,venture
,biz_code
,period_type
,SUM(stat_amount) AS stat_amount
,SUM(stat_count) AS stat_count
FROM
(
SELECT
user_id
,period_type
,CAST(period_id AS BIGINT ) AS period_id
,stat_amount
,stat_count
,venture
,biz_code
FROM t_day_change t_change
UNION ALL
SELECT
user_id
,period_type
,period_id
,stat_amount
,stat_count
,venture
,biz_code
FROM tdyh_mkt.dws_lzd_ug_save_money_mtd
WHERE ds = TO_CHAR(DATEADD(TO_DATE('${bizdate}', 'yyyymmdd'), -1, 'dd'), 'yyyymmdd')
) t_all
GROUP BY user_id
,period_id
,venture
,biz_code
,period_type
)
INSERT OVERWRITE TABLE dws_lzd_ug_save_money_mtd PARTITION(ds='${bizdate}',venture,biz_code,is_change)
SELECT
GETDATE() gmt_create
,GETDATE() as gmt_modified
,t_all.user_id
,t_all.period_type
,t_all.period_id
,t_all.stat_amount
,t_all.stat_count
,t_all.venture AS site_id
,t_all.venture
,t_all.biz_code
,IF(t_change.user_id is not null ,1,0) AS is_change
FROM t_update_all t_all
LEFT JOIN t_day_change t_change
ON t_all.venture = t_change.venture
AND t_all.user_id = t_change.user_id
AND t_all.biz_code = t_change.biz_code
;
省钱订单Top3商品表.sql
-- 对每天增量省钱的用户重排序
WITH t_history_change AS (
SELECT
t_history_df.user_id
,t_history_df.venture
,t_history_df.biz_code
,t_history_df.trade_order_id
,t_history_df.trade_order_line_id
,t_history_df.amount
,t_history_df.amount_rank
,t_history_df.store_id
,t_history_df.item_id
,t_history_df.item_title
,t_history_df.item_url
,t_history_df.item_pict_url
,t_history_df.sku_id
,t_history_df.sku_info
,t_history_df.category_id
,t_history_df.quantity
,t_history_df.order_fulfill_time
,t_history_df.order_delivery_time
,t_history_df.order_finish_time
FROM (
SELECT
*
FROM tdyh_mkt.dwd_lzd_ug_save_money_rank_df
WHERE ds = TO_CHAR(DATEADD(TO_DATE('${bizdate}', 'yyyymmdd'), -1, 'dd'), 'yyyymmdd')
) t_history_df
JOIN (
SELECT user_id,venture,biz_code
FROM tdyh_mkt.dws_lzd_ug_save_money_di
WHERE ds = '${bizdate}'
GROUP BY user_id,venture,biz_code
) t_delta_save
ON t_history_df.user_id = t_delta_save.user_id
AND t_history_df.venture = t_delta_save.venture
AND t_history_df.biz_code = t_delta_save.biz_code
),
t_change_all AS (
SELECT
user_id
,trade_order_id
,venture
,biz_code
,store_id
,item_id
,item_title
,item_url
,item_pict_url
,sku_id
,sku_info
,category_id
,order_fulfill_time
,order_delivery_time
,order_finish_time
,amount
,quantity
FROM t_history_change
UNION ALL
SELECT
user_id
,trade_order_id
,venture
,biz_code
,0 as store_id
,item_id
,item_title
,item_url
,item_pict_url
,sku_id
,'' AS sku_info
,category_id
,max(order_fulfill_time) as order_fulfill_time
,max(order_delivery_time) as order_delivery_time
,max(order_finish_time) as order_finish_time
,SUM(amount) AS amount
,SUM(quantity) AS quantity
FROM tdyh_mkt.dws_lzd_ug_save_money_di
WHERE ds = '${bizdate}'
GROUP BY
user_id
,trade_order_id
,venture
,biz_code
,item_id
,item_title
,item_url
,item_pict_url
,sku_id
,category_id
),
t_change_all_rank AS (
SELECT
user_id
,amount_rank
,venture
,biz_code
,trade_order_id
,amount
,store_id
,item_id
,item_title
,item_url
,item_pict_url
,sku_id
,sku_info
,category_id
,quantity
,order_fulfill_time
,order_delivery_time
,order_finish_time
FROM
(
SELECT
*
,ROW_NUMBER() OVER (PARTITION BY user_id,venture,biz_code ORDER BY amount DESC,sku_id DESC ,trade_order_id DESC) AS amount_rank
FROM
(
SELECT
user_id
,trade_order_id
,venture
,biz_code
,0 as store_id
,item_id
,item_title
,item_url
,item_pict_url
,sku_id
,'' AS sku_info
,category_id
,max(order_fulfill_time) as order_fulfill_time
,max(order_delivery_time) as order_delivery_time
,max(order_finish_time) as order_finish_time
,SUM(amount) AS amount
,SUM(quantity) AS quantity
FROM t_change_all
GROUP BY
user_id
,trade_order_id
,venture
,biz_code
,item_id
,item_title
,item_url
,item_pict_url
,sku_id
,category_id
) t
) res
WHERE amount_rank <=3
)
INSERT OVERWRITE TABLE dwd_lzd_ug_save_money_rank_df PARTITION (ds='${bizdate}',venture,biz_code,is_change)
SELECT
t_history_df.gmt_create
,t_history_df.gmt_modified
,t_history_df.user_id
,t_history_df.amount_rank
,t_history_df.trade_order_id
,t_history_df.trade_order_line_id
,t_history_df.amount
,t_history_df.store_id
,t_history_df.item_id
,t_history_df.item_title
,t_history_df.item_url
,t_history_df.item_pict_url
,t_history_df.sku_id
,t_history_df.sku_info
,t_history_df.category_id
,t_history_df.quantity
,t_history_df.order_fulfill_time
,t_history_df.order_delivery_time
,t_history_df.order_finish_time
,t_history_df.venture AS site_id
,t_history_df.venture
,t_history_df.biz_code
,0 as is_change
FROM (
SELECT *
FROM tdyh_mkt.dwd_lzd_ug_save_money_rank_df
WHERE ds = TO_CHAR(DATEADD(TO_DATE('${bizdate}', 'yyyymmdd'), -1, 'dd'), 'yyyymmdd')
) t_history_df
LEFT JOIN
(
SELECT
user_id,venture,biz_code
FROM tdyh_mkt.dws_lzd_ug_save_money_di
WHERE ds = '${bizdate}'
GROUP BY user_id,venture,biz_code
) t_delta_save
ON t_history_df.user_id = t_delta_save.user_id
AND t_history_df.venture = t_delta_save.venture
AND t_history_df.biz_code = t_delta_save.biz_code
WHERE t_delta_save.user_id IS NULL
UNION ALL
SELECT
GETDATE() AS gmt_create
,GETDATE() AS gmt_modified
,t_change_rank.user_id
,t_change_rank.amount_rank
,t_change_rank.trade_order_id
,0 as trade_order_line_id
,t_change_rank.amount
,t_change_rank.store_id
,t_change_rank.item_id
,t_change_rank.item_title
,t_change_rank.item_url
,t_change_rank.item_pict_url
,t_change_rank.sku_id
,t_change_rank.sku_info
,t_change_rank.category_id
,t_change_rank.quantity
,t_change_rank.order_fulfill_time
,t_change_rank.order_delivery_time
,t_change_rank.order_finish_time
,t_change_rank.venture AS site_id
,t_change_rank.venture
,t_change_rank.biz_code
,CASE WHEN t_his_change.user_id IS NOT NULL AND t_change_rank.amount_rank = t_his_change.amount_rank THEN 0 ELSE 1 END AS is_change
FROM t_change_all_rank t_change_rank
LEFT JOIN t_history_change t_his_change
ON t_change_rank.user_id = t_his_change.user_id
AND t_change_rank.venture = t_his_change.venture
AND t_change_rank.biz_code = t_his_change.biz_code
AND t_change_rank.trade_order_id = t_his_change.trade_order_id
AND t_change_rank.item_id = t_his_change.item_id
AND t_change_rank.sku_id = t_his_change.sku_id
;