MySQL第二种实现方式:现在有一个生产计划,甲乙丙3个品类共16个产物,生产 ...

打印 上一主题 下一主题

主题 550|帖子 550|积分 1650

接上篇:链接: 现在有一个生产计划,甲乙丙3个品类共16个产物,生产时间6天,每天甲品类可以生产1张单,乙3张,丙1张,请用MySQL写出H列的效果
第二种写法:
  1. -- 使用WITH子句创建CTE
  2. WITH initial_data AS (
  3.     SELECT 品类产品, 生产时间开始, 生产时间结束, 该品类每天可排单数量,
  4.            ROW_NUMBER() OVER () AS original_order
  5.     FROM produces
  6. ),
  7. scheduled_producet AS (
  8.     SELECT 品类产品, 生产时间开始, 生产时间结束, 该品类每天可排单数量,
  9.            DATE_ADD(生产时间开始, INTERVAL FLOOR(ROW_NUMBER() OVER (PARTITION BY 品类产品 ORDER BY original_order) / 该品类每天可排单数量) DAY) AS 参照排产日期,
  10.            original_order
  11.     FROM initial_data
  12. )
  13. -- 查询CTE
  14. SELECT 品类产品, 生产时间开始, 生产时间结束, 该品类每天可排单数量, 参照排产日期
  15. FROM scheduled_producet
  16. ORDER BY original_order;
复制代码
终极效果:

以下是带注释的SQL代码:
  1. -- 第一个CTE: initial_data
  2. -- 选择表中的所有列,并为每一行分配一个顺序编号 original_order
  3. WITH initial_data AS (
  4.     SELECT 品类产品, 生产时间开始, 生产时间结束, 该品类每天可排单数量,
  5.            ROW_NUMBER() OVER () AS original_order
  6.     FROM produces
  7. ),
  8. -- 第二个CTE: scheduled_producet
  9. -- 根据品类产品进行分区,并按原始顺序 original_order 排序,计算参照排产日期
  10. scheduled_producet AS (
  11.     SELECT 品类产品, 生产时间开始, 生产时间结束, 该品类每天可排单数量,
  12.            DATE_ADD(生产时间开始, INTERVAL FLOOR(ROW_NUMBER() OVER (PARTITION BY 品类产品 ORDER BY original_order) / 该品类每天可排单数量) DAY) AS 参照排产日期,
  13.            original_order
  14.     FROM initial_data
  15. )
  16. -- 最终查询: 从 scheduled_producet 中选择所有列,并按原始顺序 original_order 排序输出
  17. SELECT 品类产品, 生产时间开始, 生产时间结束, 该品类每天可排单数量, 参照排产日期
  18. FROM scheduled_producet
  19. ORDER BY original_order;
复制代码
每个部分的作用如下:
initial_data CTE:为 produces 表中的每一行分配一个顺序编号 original_order,以记录原始数据的顺序。
scheduled_producet CTE:使用 ROW_NUMBER() 窗口函数按品类产物举行分区,并根据 original_order 盘算 参照排产日期。参照排产日期 的盘算基于每天可排单数目。
终极查询:从 scheduled_producet CTE 中选择所需列,并按 original_order 排序,确保输出顺序与原始数据顺序一致。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

怀念夏天

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表