2021 A과제 - A
SELECT
CONCAT(t1.ONo, '-', t1.Opos) AS `ONo-Opos`,
MAX(CASE WHEN t1.StepNO = 1 THEN TIMESTAMPDIFF(SECOND, t1.START, t1.END) END) AS `Step 1`,
MAX(CASE WHEN t2.StepNO = 2 THEN TIMESTAMPDIFF(SECOND, t2.START, t2.END) END) AS `Step 2`,
MAX(CASE WHEN t3.StepNO = 3 THEN TIMESTAMPDIFF(SECOND, t3.START, t3.END) END) AS `Step 3`,
TIMESTAMPDIFF(SECOND, t1.START, t3.END)
- IFNULL(MAX(CASE WHEN t1.StepNO = 1 THEN TIMESTAMPDIFF(SECOND, t1.START, t1.END) END), 0)
- IFNULL(MAX(CASE WHEN t2.StepNO = 2 THEN TIMESTAMPDIFF(SECOND, t2.START, t2.END) END), 0)
- IFNULL(MAX(CASE WHEN t3.StepNO = 3 THEN TIMESTAMPDIFF(SECOND, t3.START, t3.END) END), 0) AS transport,
TIMESTAMPDIFF(SECOND, t1.START, t3.END) AS total
FROM
tblstep t1
LEFT JOIN
tblstep t2 ON t1.ONo = t2.ONo AND t1.Opos = t2.Opos AND t2.StepNO = 2
LEFT JOIN
tblstep t3 ON t1.ONo = t3.ONo AND t1.Opos = t3.Opos AND t3.StepNO = 3
WHERE
t1.StepNO = 1
GROUP BY
`ONo-Opos`;
이 쿼리는 실시간으로 값은 나오지만 마지막 공정이 끝나면 나오지 않는다.
2021 A과제 - B
SELECT
CONCAT(t1.ONo, '-', t1.Opos) AS `ONo-Opos`,
MAX(CASE WHEN t1.StepNO = 1 THEN TIMESTAMPDIFF(SECOND, t1.START, t1.END) END) AS `Step 1`,
MAX(CASE WHEN t2.StepNO = 2 THEN TIMESTAMPDIFF(SECOND, t2.START, t2.END) END) AS `Step 2`,
MAX(CASE WHEN t3.StepNO = 3 THEN TIMESTAMPDIFF(SECOND, t3.START, t3.END) END) AS `Step 3`,
TIMESTAMPDIFF(SECOND, t1.START, t3.END)
- IFNULL(MAX(CASE WHEN t1.StepNO = 1 THEN TIMESTAMPDIFF(SECOND, t1.START, t1.END) END), 0)
- IFNULL(MAX(CASE WHEN t2.StepNO = 2 THEN TIMESTAMPDIFF(SECOND, t2.START, t2.END) END), 0)
- IFNULL(MAX(CASE WHEN t3.StepNO = 3 THEN TIMESTAMPDIFF(SECOND, t3.START, t3.END) END), 0) AS transport,
TIMESTAMPDIFF(SECOND, t1.START, t3.END) AS total
FROM
tblfinstep t1
LEFT JOIN
tblfinstep t2 ON t1.ONo = t2.ONo AND t1.Opos = t2.Opos AND t2.StepNO = 2
LEFT JOIN
tblfinstep t3 ON t1.ONo = t3.ONo AND t1.Opos = t3.Opos AND t3.StepNO = 3
WHERE
t1.StepNO = 1
GROUP BY
`ONo-Opos`;
이 쿼리는 실시간으로 값이 나오진 않지만 마지막 공정이 끝나면 모든 값이 나온다.
2021 A과제 - A + B
SELECT
CONCAT(ONo, '-', Opos) AS ONo_Opos,
MAX(CASE WHEN StepNO = 1 THEN TIMESTAMPDIFF(SECOND, START, END) END) AS Step_1,
MAX(CASE WHEN StepNO = 2 THEN TIMESTAMPDIFF(SECOND, START, END) END) AS Step_2,
MAX(CASE WHEN StepNO = 3 THEN TIMESTAMPDIFF(SECOND, START, END) END) AS Step_3,
MAX(CASE WHEN StepNO = 4 THEN TIMESTAMPDIFF(SECOND, START, END) END) AS Step_4,
MAX(CASE WHEN StepNO = 5 THEN TIMESTAMPDIFF(SECOND, START, END) END) AS Step_5,
MAX(CASE WHEN StepNO = 6 THEN TIMESTAMPDIFF(SECOND, START, END) END) AS Step_6,
TIMESTAMPDIFF(SECOND, MIN(START), MAX(END)) -
SUM(TIMESTAMPDIFF(SECOND, START, END)) AS transport,
TIMESTAMPDIFF(SECOND, MIN(START), MAX(END)) AS total
FROM (
SELECT * FROM tblstep
UNION ALL
SELECT * FROM tblfinstep
) AS combined
GROUP BY ONo, Opos;
이 쿼리는 위에서 본 쿼리의 장점들을 합쳐 놓은 모습이다.
SELECT sd.WPNo, sd.StepNo, sd.OpNo, pd.Short, cnt.WorkplanCount
FROM tblstepdef sd
JOIN tblworkplandef pd ON sd.WPNo = pd.WPNo
JOIN (
SELECT WPNo, COUNT(*) as WorkplanCount
FROM tblstepdef
GROUP BY WPNo
) cnt ON sd.WPNo = cnt.WPNo
ORDER BY sd.WPNo, sd.StepNo;
이 쿼리는 Woekplan의 이름과 그 Plan의 갯수를 나타내는 쿼리이다.
SELECT ResourceID, ResourceName, IP
FROM tblresource
WHERE ResourceID > 0
ORDER BY ResourceID;
이 쿼리는 지금 무슨 공정이 있고 IP는 무엇인지 알려주는 쿼리이다.
INSERT INTO tblquality (ONo,OPos,PNo,Nop,Tom,Mvm,Msr) VALUES (1001, 1, 2345, 'Test part 2345', '2024-11-07 12:03:40', 40, 0);
INSERT INTO tblquality (ONo, OPos, PNo, Nop, Tom, Mvm, Msr) VALUES (1000, 1, 2345, CONCAT('Test past ', PNo), NOW(), 40, 0);
INSERT INTO tblquality (ONo, OPos, PNo, Nop, Tom, Mvm, Msr) VALUES (?, ?, ?, CONCAT('Test past ', ?), NOW(), ?, ?);
SELECT ONo,OPos,PNo,Nop,Tom,Mvm,if (Msr = 0, 'NOK','OK')as Msr FROM tblquality