我有一张桌子,结构如下:
date (DATE)
time (TIME)
quantity_ok (INT)
quantity_ng (INT)
shift (INT)
target (DECIMAL)
它包含给定产品线的生产数据。其中的问题是,班次在00:00:00没有变化,而是在23:00:00(3班,07-15,15-23,23-07)。
在这张表中,我已经有了给定班次的“正确”日期(今天00:00:00 - 07:00:00之间的生产日期为昨天,因为它属于昨天的第3班)。
我必须根据这个想法计算目标的实际百分比:
(SUM(Quality_ok) for given shift) / (nr. of min. from the beginning of the shift)*target
我正在做的是:
SELECT
`date`,
SUM(quantity_ok) AS `SUM(quantity_ok)`,
(TIME_TO_SEC(NOW()) - TIME_TO_SEC('07:00:00'))/60*`target` AS actual_target,
SUM(quantity_ok)/((TIME_TO_SEC(NOW()) - TIME_TO_SEC('07:00:00'))/60*`target`)*100 AS `Actual % of target`,
`time`
FROM U126_td
WHERE (`date` = CURDATE())
上述工作正确地适用于第一班次,对于第二班次,它给出了实际百分比的总和(我需要它从15:00开始重置为零),并且它没有给出00:00-07:00的结果
我应该根据有条件的变化计算,但在这里我迷失了。
感谢您的回答!
编辑2: 因为我提出了似乎有用的东西:
SELECT
`date`, `time`, `actshift`,
SUM(quantity_ok) AS `SUM(quantity_ok)`,
MAX(shift) AS `MAX(shift)`,
MAX(`time`) AS `MAX(time)`,
CASE actshift WHEN 1 THEN
SUM(quantity_ok)/((TIME_TO_SEC(NOW()) - TIME_TO_SEC('07:00:00'))/60*`target`)*100
WHEN 2 THEN
SUM(quantity_ok)/((TIME_TO_SEC(NOW()) - TIME_TO_SEC('15:00:00'))/60*`target`)*100
WHEN 3 THEN
CASE MAX(`time`) WHEN MAX(`time`)<'07:00:00' THEN
SUM(quantity_ok)/((TIME_TO_SEC(NOW()) - TIME_TO_SEC('00:00:00'))/60*`target`)*100
ELSE
SUM(quantity_ok)/((TIME_TO_SEC(NOW()) - TIME_TO_SEC('23:00:00'))/60*`target`)*100
END
END AS `Actual % of target`
FROM U126_td
WHERE (`date` = CURDATE())
当然,所有这些shi(f)t都需要清理一下“ - ”
答案 0 :(得分:0)
我需要一些样本数据和所需的输出才能提出完整的查询设计,但基本上你不需要计算班次的开始,甚至不需要计算你所处的班次来计算它的持续时间自转变开始以来。
你只需要在相关的时间值上加一小时来处理午夜的偏移量,然后在除以转换的长度后计算出余数。
-- How many seconds have passed since the current shift started?
SELECT TIME_TO_SEC(NOW() + INTERVAL 1 HOUR) % 28800;
-- Or in minutes:
SELECT FLOOR(TIME_TO_SEC(NOW() + INTERVAL 1 HOUR) / 60) % 480;