我有一個表的值,與該結構: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