问题描述,一句sql查询下图中所有字段信息。
预计完成时间查询说明:
通过前5块组件的生产时间计算出它们每一块的平均时间,每10块组件计算一次平均时间。
问题描述,一句sql查询下图中所有字段信息。
预计完成时间查询说明:
通过前5块组件的生产时间计算出它们每一块的平均时间,每10块组件计算一次平均时间。
基于最新版ChatGPT4的回答,望采纳!!!有其他问题也可以询问我哦、”(最新版更智能,功能更加强大)
假设我们有一个名为 orders
的数据表,其结构如下:
以下是一个查询示例:
WITH order_avg_time AS (
SELECT
order_id,
order_quantity,
engineer,
production_start_time,
production_progress,
duration,
SUM(duration) OVER (PARTITION BY engineer ORDER BY production_start_time ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) / 5.0 AS avg_time
FROM
orders
),
order_avg_time_every_10 AS (
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY engineer ORDER BY production_start_time) AS row_num
FROM
order_avg_time
)
UPDATE orders
SET estimated_completion_time = new_estimated_completion_time.new_value
FROM (
SELECT
order_avg_time_every_10.order_id,
CASE
WHEN row_num % 10 = 0 THEN avg_time * (order_quantity - production_progress)
ELSE estimated_completion_time
END AS new_value
FROM
order_avg_time_every_10
) AS new_estimated_completion_time
WHERE
orders.order_id = new_estimated_completion_time.order_id;
这个查询首先使用一个名为 order_avg_time
的CTE (公共表表达式) 计算每个工程师的前5块组件的生产时间平均值。然后,它使用名为 order_avg_time_every_10
的第二个CTE 为每个工程师的工单添加一个行号。
接下来,查询更新 orders
表的 estimated_completion_time
字段。当行号(row_num
)是10的倍数时,将平均时间乘以剩余的组件数量(order_quantity - production_progress
)以计算新的预计完成时间。在其他情况下,保持 estimated_completion_time
字段的当前值不变。
请注意,此查询将更新表中的 estimated_completion_time
字段,而不是仅在查询结果中显示新值。根据您的需求,这可能是您要执行的操作。如果您只希望在查询结果中查看预计完成时间而不更新表,请使用SELECT语句替换UPDATE语句。