首页 > 数据库 >sql实现24小时归因

sql实现24小时归因

时间:2023-02-18 18:22:41浏览次数:32  
标签:24 popup ss pay order 归因 sql orders id

with popup as (
-- 弹窗点击
select distinct_id
     , sc_user_id
     , time         click_at
     , test_flag
     , plan_id
     , bucket_desc
     , exper_id
     , page_type
     , sc_city
     , ds
from events
where ds in ('${yesterday}','${today}') 
and plan_id != ''
and event = 'popupClick'
), pay as (
-- 支付
select distinct_id 
     , order_id
     , sc_user_id 
     , time         pay_at
     , ds
from events
where ds in ('${yesterday}','${today}') 
and event = 'submitOrder'
), orders as (
select user_id
     , order_id
     , real_amount + gift_card_amount order_amount
from orders
where ds = '${today}'
and paid_at != '1970-01-01 00:00:00'
)
, diff as (
-- 取24小时支付
select pay.distinct_id
     , pay.sc_user_id
     , pay.pay_at
     , popup.click_at
     , popup.test_flag
     , popup.plan_id
     , popup.bucket_desc
     , popup.exper_id
     , popup.page_type
     , datediff(to_date(pay_at ,'yyyy-mm-dd hh:mi:ss.ff3'),  to_date(click_at , 'yyyy-mm-dd hh:mi:ss.ff3'), 'ss') diff
     , popup.sc_city
     , popup.ds
     , coalesce(orders.order_id)    order_id
     , coalesce(cast(orders.order_amount as decimal(16, 4)), 0) order_amount
from pay
inner join popup
on popup.distinct_id = pay.distinct_id
inner join orders
on orders.user_id = pay.distinct_id
and orders.order_id = pay.order_id
where datediff(to_date(pay_at ,'yyyy-mm-dd hh:mi:ss.ff3'),  to_date(click_at , 'yyyy-mm-dd hh:mi:ss.ff3'), 'ss') >= 0  
and datediff(to_date(pay_at ,'yyyy-mm-dd hh:mi:ss.ff3'),  to_date(click_at , 'yyyy-mm-dd hh:mi:ss.ff3'), 'ss') <= 86400
), rk as (
-- 排序
select distinct_id
     , sc_user_id
     , pay_at
     , click_at
     , test_flag
     , plan_id
     , bucket_desc
     , exper_id
     , page_type
     , diff
     , order_amount 
     , order_id
     , sc_city
     , row_number() over(partition by distinct_id order by pay_at asc) pay_rk
     , row_number() over(partition by distinct_id order by click_at desc) click_rk
     , ds
from diff
)
insert overwrite table dwd_log_track_reach_pay_attribution_di partition (ds)
-- 取距离最近的一次点击和支付行为和点击
select distinct_id
     , sc_user_id
     , pay_at
     , click_at
     , test_flag
     , plan_id
     , bucket_desc
     , exper_id
     , page_type
     , diff
     , order_amount 
     , order_id
     , sc_city
     , ds
from rk
where pay_rk = 1
and click_rk = 1
;

标签:24,popup,ss,pay,order,归因,sql,orders,id
From: https://www.cnblogs.com/dch-21/p/17133265.html

相关文章

  • 常用的24/22/16/8位网段详解
    24位网段10.8.0.0/24 10.8.0.0---10.8.0.254 0-255 1*256=256个ip10.8.20.0/24 10.8.20.0---10.8.0.254 0-255 1*256=256个ip10.8.100.0/24 10.8.100.0......
  • MySQL数据库
    MySQL数据库一、MySQL数据库的介绍1、发展史1996年,MySQL1.02008年1月16号Sun公司收购MySQL。2009年4月20,Oracle收购Sun公司。MySQL是一种开放源代码的关系型数据库......
  • SQL248 平均工资
    题目描述查找排除在职(to_date='9999-01-01')员工的最大、最小salary之后,其他的在职员工的平均工资avg_salary。思路1.求单列平均值使用聚合函数avg();2.排除在职(......
  • mysql锁机制以及优化
    锁分类从性能上划分乐观锁适合读多的场景悲观锁适合写多的场景从操作粒度划分表锁一般用作数据迁移、开销小加锁快手动加表锁locktable表名称read(write),表......
  • MySQL的几个常见命令
    1、查看mysql的安装路径进入到mysql的命令行或者mysql可视化查询工具的界面,输入下面的指令showvariableslike"%char%";character_sets_dir就是mysql的安装目录2、......
  • Windows系统下安装MySQL8高版本(已安装MySQL5)
    Windows系统下安装MySQL8高版本(已安装MySQL5)​​一、MySQL安装包下载地址​​​​二、安装步骤​​​​三、参考资料​​一、MySQL安装包下载地址MySQL国内镜像安装地址:htt......
  • 关于MySQL 8.0 默认使用了新的身份验证插件 caching_sha2_password,而旧版本的 MySQL C
    要解决这个问题,有以下两种方法:1、使用新版本的MySQLConnector/NET。您可以从MySQL官网下载最新版本的MySQLConnector/NET,它支持新的caching_sha2_password插件。......
  • Mysql explain命令使用和搜索类型介绍
    分析语句explain是mysql中的一个指令,可以用来分析sql语句的执行计划,检测有没有使用到索引。例如:explainselect*frommvs;select_type搜索的类型table搜索的表名type搜......
  • mysql常见sql优化
    不要使用select*尽量在where字段上添加索引模糊查询中%前置不能使用索引例如like'%不一样'使用OR语句需要注意,两侧的语句都有索引才会使用索引分组优化对于分组的数据......
  • MySQL参数优化之innodb_buffer_pool_size
    innodb_buffer_pool我们俗称缓冲池,缓冲池简单来说就是一块内存区域,通过内存的速度来弥补磁盘速度较慢对数据库性能的影响。写入时,先将数据写入缓冲池种,再定期刷新到磁盘;读......