我有一个表的值,与该结构:MySQL的条件SELECT&计算基于条件
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
我在做什么是这样的:
上述作品为第一班正确地说,对于第二班,它给出了实际百分比的总和(我需要它从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())
当然,这一切的市(F)T需要被清洗一 “位” :-)
嗨马特在这里你有我的实际表,截至2016年6月7日07:04:00。 [链接](https://drive.google.com/file/d/0B4B9GxnbFt6UVG8wNE5iT0IyX00/view?usp=sharing)表格每分钟更新一次,并带有产品。数据。每次查询运行时,我都需要返回目标的实际百分比。 – Kestabacsi
谢谢,但我恐怕根本不了解最终要求。也许你可以编辑问题来包含你的样本数据的期望输出? –
嗨最后的要求是只有一个数字(百分比),每次查询运行时重新计算。表格数据以来自传感器的数据(quantity_ok,quantity_ng)更新一次/分钟。无论如何,我想我解决了它:我在最后插入一列,与实际转变nr:'code'如果(HOUR(NOW())> = 7和HOUR(NOW())<15,1,(IF (HOUR(NOW())> = 15和HOUR(NOW())<23,2,3))) – Kestabacsi