当前位置: 首页 > news >正文

记一道有趣的sql题

有一张运单表:dwd_biz_waybill_td,该表的主键是way_bill_id,并且有如下字段:

way_bill_id(运单表主键),shiping_date(下单日期,时间格式为yyyy-MM-dd),payment_customer_id(付款客户),damaged_degree_type(是否严重破损,为枚举值。1为是,0为否),is_throw_away(是否丢失,为枚举值。1为是,0为否),is_pickup_overtime(是否取超时,为枚举值。1为是,0为否)。需求为:

求连续俩周 严重破损的客户,丢失的客户、取超时的客户。

思路:

步骤一:

求每天严重破损、取超时的客户

with v_customer_votes_base_data as (  selectwaybill_td.payment_customer_id,waybill_td.shiping_date,CASE when shiping_date>= date_format(date_trunc('week',current_date),'%Y-%m-%d')  then  'cur_week'when cast(date_add('day',-7,cast(date_format(date_trunc('week',current_date),'%Y-%m-%d') as date )) as varchar)<=shiping_dateand shiping_date<cast(date_format(date_trunc('week',current_date),'%Y-%m-%d') as varchar)  then  'last_week'else nullend as shiping_date_week,sum(if(damaged_degree_type = 1,1,0)) as payment_serious_damage_votes ,     /**严重破损**/sum(if(is_throw_away = 1,1,0)) as payment_throw_away_votes ,  /**丢失票(排除退栏单)**/sum(if(is_pickup_overtime = 1,1,0)) as payment_order_pickup_overdue_votes ,/*订单取超时数*/from dwd_biz_waybill_td as waybill_tdwhere waybill_td.shiping_date >= cast(date_add('day',-7,cast(date_format(date_trunc('week',current_date),'%Y-%m-%d') as date )) as varchar)and waybill_td.shiping_date<= date_format(current_date,'%Y-%m-%d')group by waybill_td.payment_customer_id,waybill_td.shiping_date
),

第二步,求本周与上周的相关指标

 /*客户连续俩周的相关指标*/
v_customer_votes_result as (  select payment_customer_id,shiping_date_week,                                                                /*本周还是上周*/sum(payment_serious_damage_votes) as payment_serious_damage_votes ,               /*严重破损*/sum(payment_throw_away_votes) as payment_throw_away_votes,                        /*丢失票(排除退栏单)*/sum(payment_order_pickup_overdue_votes) as payment_order_pickup_overdue_votes,    /*订单取超时数*/sum(payment_inner_overdue_votes) as payment_inner_overdue_votes                   /*内因超时票(内因)*/from v_customer_votes_base_datawhere shiping_date_week is not nullgroup by payment_customer_id,shiping_date_week
)

第三部,将本周与上周的指标打平成一行

 /*客户连续俩周的相关指标*/
v_customer_votes_result_two_week as (  select payment_customer_id,sum(if(shiping_date_week='cur_week' and payment_serious_damage_votes>0,1,0)) as payment_serious_damage_votes,sum(if(shiping_date_week='last_week' and payment_serious_damage_votes>0,1,0)) as payment_serious_damage_votes_last_week,sum(if(shiping_date_week='cur_week' and payment_throw_away_votes>0,1,0)) as payment_throw_away_votes,sum(if(shiping_date_week='last_week' and payment_throw_away_votes>0,1,0)) as payment_throw_away_votes_last_week,sum(if(shiping_date_week='cur_week' and payment_order_pickup_overdue_votes>0,1,0)) as payment_order_pickup_overdue_votes,sum(if(shiping_date_week='last_week' and payment_order_pickup_overdue_votes>0,1,0)) as payment_order_pickup_overdue_votes_last_weekfrom v_customer_votes_resultgroup by payment_customer_id
)

第四步:计算结果:

select if(payment_serious_damage_votes>0 and payment_serious_damage_votes_last_week>0,1,0) as is_serious_damage_tw,    /*是否【连续2周】严重破损*/  if(payment_throw_away_votes>0 and payment_throw_away_votes_last_week>0,1,0) as is_serious_damage_tw   /*是否【连续2周】丢失*/if(payment_order_pickup_overdue_votes>0 and payment_order_pickup_overdue_votes_last_week>0,1,0) as is_serious_damage_tw,    /*是否【连续2周】取超时*/
from v_customer_votes_result_two_week

http://www.lryc.cn/news/108130.html

相关文章:

  • C高级【day2】
  • 认识Webpack插件Plugin;CleanWebpackPlugin插件;HtmlWebpackPlugin;DefinePlugin;Mode模式
  • Redis 6.0的新特性:多线程、客户端缓存与安全
  • 【雕爷学编程】MicroPython动手做(37)——驱动LCD与图文显示3
  • 自然语言处理从入门到应用——LangChain:提示(Prompts)-[提示模板:序列化提示信息]
  • 【LinearAlgebra】Chapter 12 - Linear Algebra in Probability Statistics
  • webshell详解
  • 数据结构 | 搜索和排序——搜索
  • 【python】对象
  • k8s概念-污点与容忍
  • “从零开始学习Spring Boot:构建高效、可扩展的Java应用程序“
  • 通向架构师的道路之tomcat集群
  • 结构体,枚举,联合大小的计算规则
  • Vue2 第十七节 Vue中的Ajax
  • ES6 - 字符串新增的一些常用方法
  • 最新SQLMap安装与入门技术
  • Java 使用 Google Guava 实现接口限流
  • 帮助中心的价值是什么?怎样才能在线搭建官网网站帮助中心?
  • Kubernetes——理论基础
  • 【VUE3】
  • 《金融数据保护治理白皮书》发布(137页)
  • 上海亚商投顾:沪指震荡微涨 金融、地产午后大幅走强
  • Linux文件管理知识:查找文件
  • 【TypeScript】安装的坑!
  • spring boot 2.x 使用 jpa 映射 json mysql列数据映射乱码
  • 创建Helm脚本
  • 2.05 购物车后台刷新并显示
  • 2023年第四届“华数杯”数学建模思路 - 案例:异常检测
  • inline的盒子设置transform不生效
  • 自然语言处理学习笔记(四)————词典分词