mysql高级刷题-01-求项目子任务分组计算

在这里插入图片描述
这条 SQL 查询用于从 Tasks 表中计算项目的相关信息,并根据项目的总时长进行排序。具体来看,这段查询的目的是将连续的任务分组为一个项目,并计算每个项目的总天数、子任务 ID 列表、项目的开始日期和结束日期。下面是对这条 SQL 查询的详细分析:
sql

SELECT 
    count(1) AS total_days,
    GROUP_CONCAT(id) AS sub_tasks,
    min(start_date) AS proj_start,
    max(end_date) AS proj_end
FROM 
    Tasks
GROUP BY 
    DATE_sub(start_date, INTERVAL id DAY)
ORDER BY 
    total_days;

sql
复制代码

GROUP BY DATE_sub(start_date, INTERVAL id DAY)

这部分使用了一个技巧来将连续的任务分组为一个项目。它通过将每个任务的 start_date 减去任务的 id 作为一个分组条件,这样相同项目的任务将会有相同的分组值。

DATE_sub(start_date, INTERVAL id DAY):这个表达式将每个任务的 start_date 减去其 id 值所对应的天数,形成一个新的日期值。
GROUP BY:使用这个日期值作为分组键,将那些连续的任务(即它们的开始日期和结束日期紧邻在一起的任务)分到同一个组中。
2. SELECT 子句
sql

SELECT 
    count(1) AS total_days,
    GROUP_CONCAT(id) AS sub_tasks,
    min(start_date) AS proj_start,
    max(end_date) AS proj_end

count(1) AS total_days:计算每个项目中的任务总数,这实际上是每个项目的持续天数。
GROUP_CONCAT(id) AS sub_tasks:将每个项目中的所有任务的 id 值连接成一个逗号分隔的字符串。
min(start_date) AS proj_start:获取每个项目中的最早开始日期,即项目的开始日期。
max(end_date) AS proj_end:获取每个项目中的最晚结束日期,即项目的结束日期。
3. ORDER BY total_days
sql
复制代码
ORDER BY total_days;
ORDER BY total_days:根据项目的总天数对结果进行升序排序。这意味着短期项目将首先出现在结果中。
示例数据及其应用
假设 Tasks 表的数据如下:

id	start_date	end_date
1	2021-08-01	2021-08-02
2	2021-08-02	2021-08-03
3	2021-08-04	2021-08-05
4	2021-08-05	2021-08-06
5	2021-08-07	2021-08-08

第一个项目由任务 1 和 2 组成,因为它们是连续的。
第二个项目由任务 3 和 4 组成,因为它们也是连续的。
第三个项目是任务 5,它是单独的一个任务。
使用上述查询,这些任务将被分组并计算其总天数、子任务 ID 列表、开始日期和结束日期。

查询结果示例

total_days	sub_tasks	proj_start	proj_end
2			1,2			2021-08-01	2021-08-03
2			3,4			2021-08-04	2021-08-06
1			5			2021-08-07	2021-08-08

优化与改进
索引:确保在 start_date 列上有索引,以提高查询性能,尤其是在数据量较大的情况下。
GROUP_CONCAT:在连接子任务 ID 时,如果任务 ID 很多,可以设置 GROUP_CONCAT_MAX_LEN 以避免截断。
sql
复制代码

SET SESSION group_concat_max_len = 10000;

通过上述分析,我们了解了这条 SQL 查询的目的、运作方式及其各个组成部分的作用。此查询有效地将连续的任务分组为项目并计算所需的项目信息。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java版MES系统全套源码,支持 SaaS 多租户,管理后台的 Vue3 版本采用 :vue-element-plus-admin

MES生产制造执行系统源码,有演示,自主研发,多个项目应用案例,成熟稳定。支持二次开发,商业授权后可商用。 MES系统是面向制造企业车间执行层的生产信息化管理系统,能实时监控生产过程、管理制造数据、优化生…

K8S——安全机制

目录 机制说明: 一、认证(Authentication) 1、三种认证方式 ①HTTP Token 认证:通过一个 Token 来识别合法用户 ②HTTP Base 认证:通过用户名密码的方式认证 ③HTTPS 证书认证(最严格)&am…

【并发】Synchronized的底层原理

基本概念 Synchronized【对象锁】采用互斥的方式让同一时刻最多只有一个线程能够持有【对象锁】,如果其他线程想要获取这个【对象锁】就会被阻塞住 底层实现原理 我们可能听过,synchronized底层是通过Monitor来实现的,但如何直观的观察呢&…

一起来露营吧!2024COSP上海国际户外展带您逃离城市,尽享夏日美好~

夏日,清空,微风 宜在湖畔撒欢,宜在山野放松 宜露营、听音乐、感受自然 初夏时节,微风不燥,最适合露营啦! 一块绿地,一顶帐篷,一片安静的湖 在如茵绿地上,躺进初夏里 …

同一浏览器不同用户登录覆盖问题

同一浏览器使用的 Cookie 是相同的,第二个用户登录时,将会覆盖第一个用户的登录信息。不能存放在 Cookie 内,这样不能唯一区分用户,所以将Cookies改成localStorage import Cookies from js-cookieconst TokenKey Admin-Tokenexp…

DNS域名

DNS域名 DNS是域名系统的简称 域名和ip地址之间的映射关系 互联网中,ip地址是通信的唯一标识 访问网站,域名,ip地址不好记,域名朗朗上口,好记。 域名解析的目的就是为了实现,访问域名就等于访问ip地址…

代码随想录算法训练营Day15|102.二叉树的层序遍历 226.翻转二叉树 101.对称二叉树

102.二叉树的层序遍历 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right)…

企业建设数字工厂管理系统该如何选择供应商

随着信息技术的飞速发展,数字化转型已成为企业提升竞争力的关键。在制造业领域,建设数字工厂管理系统更是实现智能化生产、优化资源配置、提高生产效率的重要途径。然而,面对市场上琳琅满目的数字工厂管理系统供应商,企业改如何选…

TCP协议的核心机制

TCP协议的核心机制 一:确认应答机制1.2:超时重传接收缓冲区 超时重传时间重置连接 一:确认应答机制 对于TCP协议来说,要解决的一个很重要的问题,就是可靠传输 可靠传输,不是指发送方能够100%的把数据发送给接收方,而是尽可能. 尤其是让发送方知道,接收方是否收到. 举个例子: …

Spring Boot 应用打 WAR 包后无法注册到 Nacos怎么办

你好,我是柳岸花开。 在微服务架构中,服务注册与发现是至关重要的一环。Nacos 作为阿里巴巴开源的注册中心,能够很好地满足这一需求。然而,在将 Spring Boot 应用打包成 WAR 部署到外部服务器时,可能会遇到服务无法注册…

实用软件分享---- i茅台 在windows上自动预约和自动获取小茅运的软件

专栏介绍:本专栏主要分享一些实用的软件(Po Jie版); 声明1:软件不保证时效性;只能保证在写本文时,该软件是可用的;不保证后续时间该软件能一直正常运行;不保证没有bug;如果软件不可用了,我知道后会第一时间在题目上注明(已失效)。介意者请勿订阅。 声明2:本专栏的…

基于JS实现《国家基本比例尺地形图分幅和编号》标准

1、标准 GB T 13989-2012国家基本比例尺地形图分幅和编号 地址:【高清版】GB T 13989-2012国家基本比例尺地形图分幅和编号 - 道客巴巴 2、1:100万比例尺 2.1 说明 2.2 计算公式 2.3 计算代码 2.3.1 元素数据定义 由于中国只到N层,所以只定义到O. …

自动控制:控制系统的灵敏度分析

自动控制:控制系统的灵敏度分析 引言 灵敏度问题在控制系统设计中至关重要。灵敏度衡量的是系统对参数变化和扰动的响应程度。本文将详细探讨灵敏度函数的概念,并推导出开环和闭环控制系统在前向路径和反馈路径元素扰动下的灵敏度表达式。 灵敏度概念…

8款监控电脑屏幕的软件排名(屏幕监控软件TOP8)

8款监控电脑屏幕的软件排名(屏幕监控软件TOP8) 作为企业管理者都想对企业的员工和电脑设备了如指掌,毕竟日防夜防家贼难防,利用电脑泄密者数不胜数,为此需要对电脑屏幕实施监控,小编为你推荐几个屏幕监控软…

vue3中 window绑定scroll事件滚动页面获取不到e.target.scrollTop

遇到的问题 vue3项目 onMounted(() > {window.addEventListener(scroll, (e) > {console.log(e.target.scrollTop)}) })想要监听页面中的滚动,然后获取滚动距离实现一些功能,发现event参数中获取不到e.target.scrollTop(印象中以前使…

Java Web学习笔记2——Web开发介绍

什么是Web? Web:全球广域网,也称为万维网(WWW World Wide Web),能够通过浏览器访问的网站。 1)淘宝、京东、唯品会等电商系统; 2)CRM、OA、ERP企业管理系统&#xff1…

Wi-Fi 6E vs. Wi-Fi 7: Which is the Best Fit for Your Infrastructure?

Wi-Fi 6E vs. Wi-Fi 7: Which is the Best Fit for Your Infrastructure? With the rapid advancement of wireless technology, organizations face a critical decision: should they adopt Wi-Fi 6E now or wait for Wi-Fi 7? This decision impacts various aspects of …

isp效果库相关参数——镜像翻转

前言 之前一直比较忙着接触新工作内容,所以有一段搁置期,但是工作中的知识点还是有一直记录的,只是没空发出来,毕竟需要先熟悉才能总结内容,接下来的几天会连着发布 不同的产品数据手册有着不同的叫法但是统一的意思离…

【成品设计】基于IAP15W4K的久坐提醒器

《基于IAP15W4K的久坐提醒器》 整体功能: 作品名称:《基于IAP15W4K61S4的久坐提醒器》 作品器件: 单片机:IAP15W4K61S4 2.人体感应模块: 引脚连接: 1.VCC:正极 3.3-5V供电 2.GND:…

为什么要选择软件开发外包?降本增效共创共赢

►开发外包是什么? 软件开发外包就是将企业的软件开发项目交给外部的专业团队或个人来完成,这些外包团队通常具备丰富的技术经验和专业的开发能力,能够根据企业的需求,提供定制化的软件开发服务。通过外包,企业可以节…