ToB企服应用市场:ToB评测及商务社交产业平台

标题: MySQL第二种实现方式:现在有一个生产计划,甲乙丙3个品类共16个产物,生产 [打印本页]

作者: 怀念夏天    时间: 2024-6-11 12:42
标题: MySQL第二种实现方式:现在有一个生产计划,甲乙丙3个品类共16个产物,生产
接上篇:链接: 现在有一个生产计划,甲乙丙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企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4