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

SQL解惑 - 谜题2

文章目录

  • 一、谜题描述
  • 二、分析
  • 三、答案
  • 四、总结

一、谜题描述

创建一个记录雇员缺勤率的数据库。使用的表结构如下:Absenteeism
主键:PRIMARY KEY (emp_id, absent_date)

字段名字段类型字段中文名字段描述
emp_idINTERGER雇员id-
absent_dateSTRING缺勤日期-
reason_codeSTRING缺勤原因-
severity_pointsINTEGER严重性计分对缺勤行为进行处罚性计分

如果雇员在一年的时间内严重性计分累计达到40,就自动将该雇员解雇。如果雇员连续缺勤超过一天,就视为长病假,而不是普通的缺勤。这时第二天、第三天和以后的日子中都不会统计该股元的严重性分数,这些天也不算做缺勤。

二、分析

步骤1:将雇员连续缺勤记录的严重性计分置为0;
步骤2:找出一年内严重性计分累计达到40的雇员;
需要用到的关联表:
雇员表:Personnel

字段名字段类型字段中文名字段描述
emp_idINTERGER雇员id雇员唯一标识
emp_nameSTRING雇员名字-

日期维度表:Calendar

字段名字段类型字段中文名字段描述
dateSTRING日期唯一键
date_typeSTRING日期类型eg:工作日/周末

三、答案

SparkSQL语法

SQL1:将雇员连续缺勤达到一天的记录的严重性计分置为0;

思路:按雇员分组,按日期排序,得到rn;用日期减rn;用开窗的方式代替group by 减少表自身关联次数。

select emp_id,absent_date,reason_code,if(absent_cnt > 1,0,severity_points) as severity_points
from 
(select emp_id,absent_date,reason_code,severity_points,tag_date,sum(1)over(partition by emp_id,date_add(absent_date,-rn)) as absent_cntfrom (select emp_id,absent_date,reason_code,severity_points,row_number()over(partition by emp_id order by absent_date) as rnfrom Absenteeism) in1
) t1

SQL2:找出一年内严重性计分累计达到40的雇员;

select t1.emp_id,sum(t1.severity_points)
from t1
left join Calendar t2
where t2.date_type = 'work'
and t1.absent_date between date_add(CURRENT_DATE,-365) and CURRENT_DATE
group by t1.emp_id
having sum(t1.severity_points) >= 40

四、总结

处理连续问题

标准步骤:
(1)按雇员分组,按日期排序,得到rn
(2)用日期减rn

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

相关文章:

  • FWT+高维前缀和:Gym - 103202M
  • 【C++】string类的接口综合运用
  • 分布式ID生成框架Leaf升级踩坑
  • 常用的设计模式
  • git的相关实用命令
  • 【使用`model.status`来获取gurobi求解过程中的模型状态】
  • 【UGUI】Unity教程:实现物品的拖拽功能
  • 【奇淫技巧】两数交换
  • Java核心知识点整理大全26-笔记
  • “上云”还是“下云”?探云计算的下一站未来!
  • Linux中top命令输出日志分析?
  • 执行栈和执行上下文
  • 7、单片机与W25Q128(FLASH)的通讯(SPI)实验(STM32F407)
  • stream流和方法引用
  • Redis——某马点评day01——短信登录
  • AES加密技术:原理与应用
  • Unity中PlayerPrefs在PC上存储位置总结
  • 消融实验:深度学习的关键分析工具
  • Redis缓存——Spring Cache入门学习
  • Python标准库copy【侯小啾python领航班系列(十五)】
  • Android--Jetpack--Lifecycle详解
  • LeetCode105.从前序和中序遍历序列构造二叉树
  • flutter-一个可以输入的数字增减器
  • 抑郁症中西医治疗对比?
  • 012 OpenCV sobel边缘检测
  • 【开源视频联动物联网平台】libmodbus 写一个modbus tcp客户端
  • 安装以及使用 stylepro_artistic 所遇问题解决
  • 【Rust】所有权的认识
  • 中间件安全:Weblogic 漏洞.(使用工具可以利用多种类型漏洞)
  • matlab操作方法(一)——向量及其操作