MySQL 依据扫码记录统计人员进出区域的时间

news2024/11/24 2:19:08

解决这样一个问题:
如下图人员在区域的扫码记录,进出区域的时候都必须扫码,中间扫码的不算,统计每个人员进入区域、出区域的时间。

在这里插入图片描述
有了人员在区域停留的组号,还差一步group by(在最后),为了方便观察中间结果。

WITH t_seq
AS
(SELECT
      t1.*,
      ROW_NUMBER() OVER (PARTITION BY person_name
      ORDER BY id) seq
    FROM scan_record t1), t_group
AS
(SELECT
      t1.*,
      IFNULL(LAG(t1.person_name) OVER (PARTITION BY person_name
      ORDER BY seq), 'none') lead_person_name,
      IFNULL(LAG(t1.area_name) OVER (PARTITION BY person_name
      ORDER BY seq), 'none') lead_area_name
    FROM t_seq t1
    ORDER BY t1.person_name, seq), t_flag
AS
(SELECT
      t1.*,
      CASE WHEN t1.person_name <> t1.lead_person_name OR
          t1.area_name <> t1.lead_area_name THEN 1 ELSE 0 END flag_number
    FROM t_group t1), result
AS
(SELECT
      t1.*,
      SUM(flag_number) OVER (PARTITION BY t1.person_name
      ORDER BY t1.seq) group_num
    FROM t_flag t1)
SELECT
  *
FROM result;

在这里插入图片描述
建表语句

CREATE TABLE scan_record (
  id bigint NOT NULL AUTO_INCREMENT,
  person_name varbinary(50) DEFAULT NULL,
  area_name varchar(50) DEFAULT NULL,
  scan_time datetime DEFAULT NULL,
  PRIMARY KEY (id)
)
ENGINE = INNODB,
CHARACTER SET utf8mb4,
COLLATE utf8mb4_0900_ai_ci;

完整答案

WITH t_seq
AS
(SELECT
      t1.*,
      ROW_NUMBER() OVER (PARTITION BY person_name
      ORDER BY id) seq
    FROM scan_record t1), t_group
AS
(SELECT
      t1.*,
      IFNULL(LAG(t1.person_name) OVER (PARTITION BY person_name
      ORDER BY seq), 'none') lead_person_name,
      IFNULL(LAG(t1.area_name) OVER (PARTITION BY person_name
      ORDER BY seq), 'none') lead_area_name
    FROM t_seq t1
    ORDER BY t1.person_name, seq), t_flag
AS
(SELECT
      t1.*,
      CASE WHEN t1.person_name <> t1.lead_person_name OR
          t1.area_name <> t1.lead_area_name THEN 1 ELSE 0 END flag_number
    FROM t_group t1),result AS
    (
 SELECT
      t1.*,
      SUM(flag_number) OVER (PARTITION BY t1.person_name
      ORDER BY t1.seq) group_num
    FROM t_flag t1
    )
SELECT t1.person_name,t1.area_name
,min(t1.scan_time) start_time
,MAX(t1.scan_time) end_time
,t1.group_num
FROM result t1
GROUP BY t1.person_name,t1.area_name,t1.group_num;

最终结果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1653031.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

淘宝订单详情与物流电子面单API接口:提升电商物流效率的利器

前言 在电子商务蓬勃发展的今天&#xff0c;物流作为电商交易的重要环节&#xff0c;其效率和准确性直接关系到消费者的购物体验和商家的运营效率。淘宝作为中国最大的电商平台之一&#xff0c;一直致力于提升物流效率和服务质量。其中&#xff0c;淘宝订单详情与物流电子面单A…

Flutter-Statewidget 创建State过程State<XXXX> createState() => _XXXXState()的解释

文章目录 创建widget 的状态对象示例代码解析 完整的代码示例总结 创建widget 的状态对象 今天有个同学问了我下State createState() > _XXXXState()时什么意思。这个代码在flutter开发中一直看到&#xff0c;很多人都不关心这个&#xff0c;直接当模板使用。今天来介绍下这…

运维自动化工具:Ansible 概念与模块详解

目录 前言 一、运维自动化工具有哪些 二、Ansible 概述 1、Ansible 概念 2、Ansible 特点 3、Ansible 工作流程 4、Ansible 架构 4.1 Ansible 组成 4.2 Ansible 命令执行来源 5、Ansible 的优缺点 三、Ansible 安装部署 1、环境部署 2、管理节点安装 Ansible 3、…

智能商品计划系统:引领未来零售业的革新之路

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;和大数据技术已成为推动各行业革新的关键动力。在零售行业中&#xff0c;智能商品计划系统的出现&#xff0c;正逐步改变着传统的商品规划与管理方式&#xff0c;为品牌注入新的活力与竞争力。本文将对智能商…

源码部署与SaaS账号:企业软件选择的自建房与租赁公寓之辩

在数字化运营的时代&#xff0c;企业选择软件解决方案就如同在选择住所&#xff1a;源码部署类似于“自建房屋”&#xff0c;而SaaS账号则更像是“租赁公寓”。 自建房屋&#xff08;源码部署&#xff09; 当你选择自建房屋时&#xff0c;你需要投入大量的时间和资金来购买土地…

什么是香草看涨期权?香草看涨期权有哪些特点?

什么是香草看涨期权&#xff1f;香草看涨期权有哪些特点&#xff1f; 香草看涨期权&#xff0c;通常也称为香草期权&#xff0c;是金融市场上的一种金融衍生品&#xff0c;由券商或金融机构推出。它允许投资者以较小的费用获取相应股票市值的收益权&#xff0c;主要用于风险管…

如何添加、编辑、调整WordPress菜单

我们最近在使用WordPress建站建设公司网站。我们是使用的hostease的主机产品建设的WordPress网站。在建设网站使用遇到了一些WordPress菜单使用方面的问题。好在hostease提供了不少帮助。 下面把WordPress菜单使用心得分享一下。 本文将详细介绍WordPress菜单的各种功能&#x…

hive日常使用时忘记部分补充(不定时)

1、date_formate、unix_timestamp、from_unixtime用法&#xff1a; 2、lag&#xff08;&#xff09;、lead()用法&#xff1a; lag&#xff08;)窗口函数返回分区中当前行之前行&#xff08;可以指定第几行&#xff09;的值。 如果没有行&#xff0c;则返回null。 lead()窗口…

组件通信-props详解

目录 一、什么是prop 二、props校验 三、组件中prop和data的区别 一、什么是prop Prop定义&#xff1a;组件上注册的一些自定义属性。 Prop作用&#xff1a;向子组件传递数据。 特点&#xff1a; 可以传递任意数量的prop可以传递任意类型的prop 二、props校验 组件的pr…

【Linux】-Linux基础命令[2]

目录 一、目录切换相关命令 1、cd 2、pwd 二、相对路径、绝对路径和特殊路径符 1、相对路径和绝对路径 2、特殊路径符 三、创建目录命令&#xff08;mkdir&#xff09; 四、文件操作命令 1、touch 创建文件 2、cat查看文件内容 3、more查看文件内容 4、cp命令复制文…

了解外汇询价和锁价,全球交易中的关键概念

外汇市场是全球交易量最大的金融市场之一&#xff0c;每天都有大量的货币买卖活动。在外汇交易中&#xff0c;询价和锁价是两个关键概念&#xff0c;它们不仅影响交易者的决策&#xff0c;还关系到交易的成本和风险控制。为了帮助交易者更好地理解和应用这两个概念&#xff0c;…

浏览器输入URL到页面展示的过程详解

重点面试题&#xff1a;当你的浏览器中地址栏输入地址并回车的一瞬间到页面能够展示回来&#xff0c;经历了什么&#xff1f; step 1、URL解析 URL&#xff1a;internet上的每一个网页都具有一个唯一的名称标识&#xff0c;通常称之为URL&#xff08;Uniform Resource Locator…

网络安全零信任学习1:基本概念

读书《白话零信任》一书笔记系列&#xff1a; 1&#xff09;基本概念 传统安全模式在某种程度上假设内网用户、设备和系统是可信的&#xff0c; 忽视了来自内网的威胁。企业一般专注于对外部的防御&#xff0c;内网用户 的访问行为往往只受到很少的限制。 随着网络攻击手段的提…

来了,135届广交会的成绩单

5月5日&#xff0c;第135届中国进出口商品交易会&#xff08;简称广交会&#xff09;在广州圆满闭幕&#xff0c;这一全球贸易盛典再次展现了中国制造的卓越实力和文化魅力&#xff0c;成就斐然&#xff0c;吸引了全球目光。 接下来&#xff0c;让我们通过数说成绩单&#xff…

c语言常用操作符(2)

1.移位操作符 移位操作符分为<<左移操作符和右移操作符>> 注&#xff1a;移位操作符的操作数只能是整数&#xff0c;同时移位操作符移动的是存储在内存中的二进制位&#xff08;也就是补码&#xff09; 同时移位操作符不要移动负数位&#xff0c;这个是标准未定义…

凡尔码安全巡检卡替代传统纸质记录卡

建筑行业、物业管理、医院等行业的安全巡检的记录方式通常以&#xff1a;1、纸质记录&#xff1a;巡检人员使用纸质巡检表格&#xff0c;手动填写巡检时间、巡检区域、巡检发现的问题以及处理情况。这种方式简单直接&#xff0c;但可能存在信息记录不完整、易丢失等问题。 2、电…

Glowroot:Java应用的性能守护神,让监控变得既轻松又有趣!

Glowroot&#xff1a;Java应用的性能守护神&#xff0c;让监控变得既轻松又有趣&#xff01; 在这个快节奏的数字化时代&#xff0c;作为一名开发者&#xff0c;你是否曾因应用性能问题而夜不能寐&#xff1f;是不是常幻想有个超级英雄能在关键时刻挺身而出&#xff0c;帮你揪…

基于深度学习的人体关键点检测与姿态识别

文章目录 源码下载地址&#xff1a; 源码地址在视频简介中 深度学习人体关键点检测&#xff0c;姿态识别 界面效果&#xff1a; 界面代码&#xff1a; from PyQt5.QtGui import * from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * f…

先经营好自己,才是成事最坚实的基础!做事要稳!

电影《教父》里有句著名的台词说&#xff1a;花半秒钟就能看透事物本质的人&#xff0c;和花一辈子也看不透事物本质的人&#xff0c;注定是截然不同的命运。而这所谓的“看透本质”&#xff0c;就是事物的底层逻辑。 底层逻辑是一种解决问题的思维模式。底层逻辑越坚固&#x…

SharePoint 使用renderListDataAsStream方法查询list超过5000时的数据

问题&#xff1a; 当SharePoint List里的数据超过5000时&#xff0c;如果使用常用的rest api去获取数据&#xff0c;例如 await this.sp.web.lists.getByTitle(Document Library).rootFolder.files.select(*, listItemAllFields).expand(listItemAllFields).filter(listItemA…