现在有一个生产计划,甲乙丙3个品类共16个产品,生产时间6天,每天甲品类可以生产1张单,乙3张,丙1张,请用MySQL写出H列的效果

现在有一个生产计划,甲乙丙3个品类共16个产品,生产时间6天,每天甲品类可以生产1张单,乙3张,丙1张,请用MySQL写出H列的效果吗?
在这里插入图片描述

最终展示结果要求为:

品类产品生产时间开始生产时间结束该品类每天可排单数量参照排产日期
甲12024-07-152024-07-2012024-07-15
甲22024-07-152024-07-2012024-07-16
乙12024-07-152024-07-2032024-07-15
乙22024-07-152024-07-2032024-07-15
乙32024-07-152024-07-2032024-07-15
乙42024-07-152024-07-2032024-07-16
乙52024-07-152024-07-2032024-07-16
乙62024-07-152024-07-2032024-07-16
乙72024-07-152024-07-2032024-07-17
乙82024-07-152024-07-2032024-07-17
丙12024-07-152024-07-2012024-07-15
丙22024-07-152024-07-2012024-07-16
丙32024-07-152024-07-2012024-07-17
丙42024-07-152024-07-2012024-07-18
丙52024-07-152024-07-2012024-07-19
丙62024-07-152024-07-2012024-07-20

解决办法:

1、进行数据拆解:

品类产品生产时间开始生产时间结束该品类每天可排单数量
甲12024-07-152024-07-201
甲22024-07-152024-07-201
乙12024-07-152024-07-203
乙22024-07-152024-07-203
乙32024-07-152024-07-203
乙42024-07-152024-07-203
乙52024-07-152024-07-203
乙62024-07-152024-07-203
乙72024-07-152024-07-203
乙82024-07-152024-07-203
丙12024-07-152024-07-201
丙22024-07-152024-07-201
丙32024-07-152024-07-201
丙42024-07-152024-07-201
丙52024-07-152024-07-201
丙62024-07-152024-07-201
-- 创建表
CREATE TABLE produces (
    `品类/产品` VARCHAR(10),
    `生产时间(开始)` DATE,
    `生产时间(结束)` DATE,
    `该品类每天可排单数量` INT
);

-- 插入数据
INSERT INTO produces (`品类/产品`, `生产时间(开始)`, `生产时间(结束)`, `该品类每天可排单数量`) VALUES
('甲1', '2024-07-15', '2024-07-20', 1),
('甲2', '2024-07-15', '2024-07-20', 1),
('乙1', '2024-07-15', '2024-07-20', 3),
('乙2', '2024-07-15', '2024-07-20', 3),
('乙3', '2024-07-15', '2024-07-20', 3),
('乙4', '2024-07-15', '2024-07-20', 3),
('乙5', '2024-07-15', '2024-07-20', 3),
('乙6', '2024-07-15', '2024-07-20', 3),
('乙7', '2024-07-15', '2024-07-20', 3),
('乙8', '2024-07-15', '2024-07-20', 3),
('丙1', '2024-07-15', '2024-07-20', 1),
('丙2', '2024-07-15', '2024-07-20', 1),
('丙3', '2024-07-15', '2024-07-20', 1),
('丙4', '2024-07-15', '2024-07-20', 1),
('丙5', '2024-07-15', '2024-07-20', 1),
('丙6', '2024-07-15', '2024-07-20', 1);

-- 确认数据插入
SELECT * FROM produces;

最终SQL:

-- 使用WITH子句创建CTE
WITH scheduled_producet AS (
    SELECT 品类产品, 生产时间开始, 生产时间结束, 该品类每天可排单数量,
           DATE_ADD(生产时间开始, INTERVAL FLOOR((@row_num := IF(@current_category = SUBSTRING(品类产品, 1, 1), @row_num + 1, 0)) / 该品类每天可排单数量) DAY) AS 参照排产日期,
           @current_category := SUBSTRING(品类产品, 1, 1) AS dummy,
           @row_order := @row_order + 1 AS row_order
    FROM produces, (SELECT @row_num := -1, @current_category := '', @row_order := 0) AS vars
    ORDER BY row_order
)

-- 查询CTE
SELECT 品类产品, 生产时间开始, 生产时间结束, 该品类每天可排单数量, 参照排产日期
FROM scheduled_producet
ORDER BY row_order;

在这里插入图片描述

完美解决!跟想要的效果一模一样!!!

品类产品生产时间开始生产时间结束该品类每天可排单数量参照排产日期
甲12024-07-152024-07-2012024-07-15
甲22024-07-152024-07-2012024-07-16
乙12024-07-152024-07-2032024-07-15
乙22024-07-152024-07-2032024-07-15
乙32024-07-152024-07-2032024-07-15
乙42024-07-152024-07-2032024-07-16
乙52024-07-152024-07-2032024-07-16
乙62024-07-152024-07-2032024-07-16
乙72024-07-152024-07-2032024-07-17
乙82024-07-152024-07-2032024-07-17
丙12024-07-152024-07-2012024-07-15
丙22024-07-152024-07-2012024-07-16
丙32024-07-152024-07-2012024-07-17
丙42024-07-152024-07-2012024-07-18
丙52024-07-152024-07-2012024-07-19
丙62024-07-152024-07-2012024-07-20

(看不懂的上面SQL的,可以看下面的注释)

注释:

-- 使用WITH子句创建CTE
WITH scheduled_producet AS (
    -- 这是一个CTE(公用表表达式)的定义开始,它将被命名为`scheduled_producet`。

    SELECT 品类产品, 生产时间开始, 生产时间结束, 该品类每天可排单数量,
           -- 选择所需的列。

           DATE_ADD(生产时间开始, INTERVAL FLOOR((@row_num := IF(@current_category = SUBSTRING(品类产品, 1, 1), @row_num + 1, 0)) / 该品类每天可排单数量) DAY) AS 参照排产日期,
           -- 这行代码使用DATE_ADD函数和INTERVAL来计算参照排产日期。
           -- FLOOR函数向下取整,用于确定在给定的每天可排单数量下,需要多少天来安排生产。
           -- @row_num是一个用户定义的变量,用来追踪当前产品类别的行号。
           -- IF函数检查当前的产品类别是否与上一个相同,如果是,则@row_num增加,否则重置为0。
           -- 参照排产日期是基于生产时间开始和行号计算的。

           @current_category := SUBSTRING(品类产品, 1, 1) AS dummy,
           -- 这行代码设置一个用户定义的变量@current_category为当前产品的类别首字母。
           -- 'dummy'是一个别名,通常用于不需要的SELECT列,但在这里它用于设置变量。

           @row_order := @row_order + 1 AS row_order
           -- 这行代码定义了一个用户定义的变量@row_order,用来为每一行分配一个顺序编号。

    FROM produces, 
        -- 从`produces`表中选择数据。

        (SELECT @row_num := -1, @current_category := '', @row_order := 0) AS vars
        -- 这是一个子查询,用于初始化用户定义的变量。

    ORDER BY row_order
    -- 根据行号对结果进行排序。
)

-- 查询CTE
SELECT 品类产品, 生产时间开始, 生产时间结束, 该品类每天可排单数量, 参照排产日期
FROM scheduled_producet
-- 从CTE `scheduled_producet`中选择数据。

ORDER BY row_order;
-- 根据行号对查询结果进行排序。

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

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

相关文章

IIS 服务器,下载APK 文件,用于发布更新最新的APK包

IIS 默认情况下无法下载 .apk 文件,需要对 IIS 服务进行设置 1、打开 IIS 对应的应用 选中MIME 类型 右键 打开功能 2、右键添加 文件扩展名:.apk MIME 类型输入:application/vnd.android.package-archive 3、重启应用 4、浏览器访问 服务地…

开发构建一个体育数据资料库:不同数据的具体意义

构建一个体育数据资料库,应包括“赛程赛果”、“比赛阵容”、“比赛指数”、“比赛详情”、“统计数据”以及“榜单数据”等关键信息。而借助东莞梦幻网络科技的源码,您可以打造一个属于自己的体育直播平台。通过该平台的资料库展示模块,您能…

下载centos7镜像及在VMware上安装Linux (Centos7)操作系统详细教程

文章目录 下载centos7镜像文件及在VMware上安装centos7详细教程一、下载Centos7镜像二、 利用VM安装Centos7进入VM软件安装配置虚拟机 安装Centos7进入图形化界面配置 三、访问外网 配置IP地址结语Linux配置IP网卡Linux配置本地yum源 下载centos7镜像文件及在VMware上安装cento…

Cesium开发环境搭建

由于win7搭建很费事,重新安装了OS,win10的。 记录一下,搭建步骤: 1.下载node.js。百度搜索即可下载对应的版本。下载cesium。 2.安装node.js。安装后,输入node -v,显示版本信息,表示安装成功…

windows下使用命令清空U盘

1、CMD命令打开后输入diskpart命令打开磁盘分区管理工具 diskpart打开如下窗口 Microsoft DiskPart 版本 10.0.19041.3636 Copyright (C) Microsoft Corporation. 在计算机上: DESKTOP-TR9HQRP 2、输入查看所有磁盘命令 list disk打印如下windows 磁盘 ###  状态    …

并查集,CF1619G - Unusual Minesweeper

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 Problem - 1619G - Codeforces 二、解题报告 1、思路分析 考虑距离在k内的两点可以合并 那么不断合并可以得到若干连通块 每个连通块自然爆炸的时间取决于连通块内的最早爆炸时间 我们还可以在每个时间点…

海外转仓系统应用案例解读:如何高效快速解决海外仓补货需求

海外仓转仓在跨境电商中是一个非常重要的业务类型,所谓的海外仓转仓,也就是指客户讲货物发送到某个海外仓后,根据业务需求,将货物中专到另一个海外仓的过程。 主要是应用在补货、销售渠道调整或者临时仓储需求上。对海外仓来说&a…

空间数据采集与管理

你还在为找不到合适的数据而苦恼吗?你还在面对大量数据束手无策,不知如何处理吗?对于从事生产和科研的人员来说,空间数据的采集与管理是地理信息系统(GIS)和空间分析领域的关键环节。通过准确高效地采集和管…

【Python字符串攻略】:玩转文字,编织程序的叙事艺术

文章目录 🚀一.字符串基础🌈二.查看数据类型⭐三.转化❤️四.字符串索引🚲五.字符串切片🎬六.字符串切片-步长☔七.反向切片注意事项🚲八.字符串💥查💥改💥删 ❤️九.字符串拼接&…

本地Nginx的安装到使用

借鉴文章 https://blog.csdn.net/weixin_44005802/article/details/135488448 1.官网下载链接:链接: https://nginx.org/en/download.html 2.将下载的zip包解压后,打开D:…\nginx-1.20.2\conf\nginx.conf,修改server为实际配置。 worker_pr…

Al2O3/SiC纳米复相陶瓷力学性能显著提升 我国研究机构数量较多

Al2O3/SiC纳米复相陶瓷力学性能显著提升 我国研究机构数量较多 Al2O3/SiC纳米复相陶瓷,是以氧化铝(Al2O3)为基体相,以纳米碳化硅(SiC)为第二相,将第二相纳米颗粒弥散进入基体相,经高…

教科书般的充电桩平台多租户技术架构设计,建议收藏!-慧哥充电桩开源平台

慧哥充电桩开源平台V2.5.2_----- SpringCloud 汽车 电动自行车 云快充1.5、云快充1.6 https://liwenhui.blog.csdn.net/article/details/134773779?spm1001.2014.3001.5502 一、多租户的概念 多租户本质上是一种软件的技术架构,它最核心的特征是多个租户可以共享一…

Nginx漏洞解析及复现

Nginx漏洞 Nginx能做到正向代理、反向代理、负载均衡、HTTP服务器等,强大的功能不言而喻,但也伴随着使用 上的风险,深入理解Nginx的漏洞有助于创建安全的业务系统。 Nginx解析漏洞 漏洞原理 Nginx的解析漏洞的出现和Nginx的版本没有关系&…

C-数据结构-树状存储基本概念

‘’’ 树状存储基本概念 深度(层数) 度(子树个数) 叶子 孩子 兄弟 堂兄弟 二叉树: 满二叉树: 完全二叉树: 存储:顺序,链式 树的遍历:按层遍历&#xff0…

Angular封装高德地图组件实现输入框搜索,地图点击选地点

Angular封装高德地图组件实现输入框搜索,地图点击选地点(Angular17版本) 话不多说直接上代码 创建一个独立组件 html代码: <div style"position: relative;"><input #searchInput nz-input placeholder"请输入地址"/><div #mapContaine…

MarianMT进行文本数据增强

B战学习视频&#xff1a;使用MarianMT进行文本数据增强 pip install transformers4.1.1 sentencepiece0.1.94 pip install mosestokenizer1.1.0from transformers import MarianMTModel,MarianTokenizer初始化模型&#xff0c;将英语翻译成罗曼语, target_model_nameHelsink…

力扣爆刷第148天之贪心算法五连刷(区间合并)

力扣爆刷第148天之贪心算法五连刷&#xff08;区间合并&#xff09; 文章目录 力扣爆刷第148天之贪心算法五连刷&#xff08;区间合并&#xff09;一、406. 根据身高重建队列二、452. 用最少数量的箭引爆气球三、435. 无重叠区间四、763. 划分字母区间五、56. 合并区间六、738.…

Android开机动画压缩包zip,自制开机动画(基于Android10.0.0-r41)

文章目录 Android开机动画压缩包zip&#xff0c;自制开机动画1.Android加载压缩包原理2.自制开机动画 Android开机动画压缩包zip&#xff0c;自制开机动画 1.Android加载压缩包原理 这里有个md文件我们看下 核心部分, 首先要创建一个文件叫做desc.txt&#xff0c;这是规定的…

Facebook开户|Facebook广告设计与测试优化

早上好家人们~今天Zoey给大家伙带来的是Facebook广告设计与测试优化&#xff0c;需要的家人们看过来啦&#xff01; 一、避免复杂用图和过多的文字 根据Facebook的数据显示&#xff0c;用户平均浏览一个贴文的时间在手机上仅花1.7秒、在电脑上则为2.5秒。因此&#xff0c;广告…

Dockershim 与 Containerd:两种容器运行时的故事

在不断发展的容器化世界中&#xff0c;两个关键组件经常被混淆&#xff1a;Dockershim 和 containerd。虽然它们在管理容器方面都发挥着重要作用&#xff0c;但它们的用途却截然不同。本文深入探讨了它们的功能&#xff0c;深入探讨了 Dockershim 和 containerd 之间的区别。 揭…