117 lines
4.3 KiB
SQL
117 lines
4.3 KiB
SQL
-- TMTT Defect Analysis - Base Data Query
|
|
-- Returns LOT-level data with TMTT input, defects (印字/腳型), and MOLD equipment
|
|
--
|
|
-- Parameters:
|
|
-- :start_date - Start date (YYYY-MM-DD)
|
|
-- :end_date - End date (YYYY-MM-DD)
|
|
--
|
|
-- Tables used:
|
|
-- DWH.DW_MES_LOTWIPHISTORY (TMTT station records, MOLD station records)
|
|
-- DWH.DW_MES_LOTREJECTHISTORY (defect records)
|
|
-- DWH.DW_MES_CONTAINER (product info)
|
|
-- DWH.DW_MES_WIP (WORKFLOWNAME, filtered by PRODUCTLINENAME <> '點測')
|
|
--
|
|
-- Notes:
|
|
-- - LOSSREASONNAME: '276_腳型不良', '277_印字不良'
|
|
-- - TMTT station: WORKCENTERNAME matching 'TMTT' or '測試'
|
|
-- - MOLD station: WORKCENTERNAME matching '成型'
|
|
-- - Multiple MOLD equipment per LOT: take earliest TRACKINTIMESTAMP
|
|
-- - TMTT dedup: one row per CONTAINERID, take latest TRACKINTIMESTAMP
|
|
-- - LOTREJECTHISTORY only has EQUIPMENTNAME (no EQUIPMENTID)
|
|
-- - WORKFLOW: from DW_MES_WIP.WORKFLOWNAME (exclude PRODUCTLINENAME='點測')
|
|
-- - Defect qty = SUM(REJECTQTY + STANDBYQTY + QTYTOPROCESS + INPROCESSQTY + PROCESSEDQTY)
|
|
|
|
WITH tmtt_records AS (
|
|
SELECT /*+ MATERIALIZE */
|
|
h.CONTAINERID,
|
|
h.EQUIPMENTID AS TMTT_EQUIPMENTID,
|
|
h.EQUIPMENTNAME AS TMTT_EQUIPMENTNAME,
|
|
h.TRACKINQTY,
|
|
h.TRACKINTIMESTAMP,
|
|
h.TRACKOUTTIMESTAMP,
|
|
h.FINISHEDRUNCARD,
|
|
h.SPECNAME,
|
|
h.WORKCENTERNAME,
|
|
ROW_NUMBER() OVER (
|
|
PARTITION BY h.CONTAINERID
|
|
ORDER BY h.TRACKINTIMESTAMP DESC, h.TRACKOUTTIMESTAMP DESC NULLS LAST
|
|
) AS rn
|
|
FROM DWH.DW_MES_LOTWIPHISTORY h
|
|
WHERE h.TRACKINTIMESTAMP >= TO_DATE(:start_date, 'YYYY-MM-DD')
|
|
AND h.TRACKINTIMESTAMP < TO_DATE(:end_date, 'YYYY-MM-DD') + 1
|
|
AND (UPPER(h.WORKCENTERNAME) LIKE '%TMTT%' OR h.WORKCENTERNAME LIKE '%測試%')
|
|
AND h.EQUIPMENTID IS NOT NULL
|
|
AND h.TRACKINTIMESTAMP IS NOT NULL
|
|
),
|
|
tmtt_deduped AS (
|
|
SELECT * FROM tmtt_records WHERE rn = 1
|
|
),
|
|
tmtt_rejects AS (
|
|
SELECT /*+ MATERIALIZE */
|
|
r.CONTAINERID,
|
|
r.LOSSREASONNAME,
|
|
SUM(NVL(r.REJECTQTY, 0) + NVL(r.STANDBYQTY, 0) + NVL(r.QTYTOPROCESS, 0)
|
|
+ NVL(r.INPROCESSQTY, 0) + NVL(r.PROCESSEDQTY, 0)) AS REJECTQTY
|
|
FROM DWH.DW_MES_LOTREJECTHISTORY r
|
|
WHERE r.TXNDATE >= TO_DATE(:start_date, 'YYYY-MM-DD')
|
|
AND r.TXNDATE < TO_DATE(:end_date, 'YYYY-MM-DD') + 1
|
|
AND (UPPER(r.WORKCENTERNAME) LIKE '%TMTT%' OR r.WORKCENTERNAME LIKE '%測試%')
|
|
AND r.LOSSREASONNAME IN ('276_腳型不良', '277_印字不良')
|
|
GROUP BY r.CONTAINERID, r.LOSSREASONNAME
|
|
),
|
|
mold_records AS (
|
|
SELECT /*+ MATERIALIZE */
|
|
m.CONTAINERID,
|
|
m.EQUIPMENTID AS MOLD_EQUIPMENTID,
|
|
m.EQUIPMENTNAME AS MOLD_EQUIPMENTNAME,
|
|
ROW_NUMBER() OVER (
|
|
PARTITION BY m.CONTAINERID
|
|
ORDER BY m.TRACKINTIMESTAMP ASC
|
|
) AS mold_rn
|
|
FROM DWH.DW_MES_LOTWIPHISTORY m
|
|
WHERE m.CONTAINERID IN (SELECT CONTAINERID FROM tmtt_deduped)
|
|
AND (m.WORKCENTERNAME LIKE '%成型%')
|
|
AND m.EQUIPMENTID IS NOT NULL
|
|
),
|
|
mold_deduped AS (
|
|
SELECT * FROM mold_records WHERE mold_rn = 1
|
|
),
|
|
product_info AS (
|
|
SELECT /*+ MATERIALIZE */
|
|
c.CONTAINERID,
|
|
c.CONTAINERNAME,
|
|
c.PJ_TYPE,
|
|
c.PRODUCTLINENAME
|
|
FROM DWH.DW_MES_CONTAINER c
|
|
WHERE c.CONTAINERID IN (SELECT CONTAINERID FROM tmtt_deduped)
|
|
),
|
|
workflow_info AS (
|
|
SELECT /*+ MATERIALIZE */
|
|
DISTINCT w.CONTAINERID,
|
|
w.WORKFLOWNAME
|
|
FROM DWH.DW_MES_WIP w
|
|
WHERE w.CONTAINERID IN (SELECT CONTAINERID FROM tmtt_deduped)
|
|
AND w.PRODUCTLINENAME <> '點測'
|
|
)
|
|
SELECT
|
|
t.CONTAINERID,
|
|
p.CONTAINERNAME,
|
|
p.PJ_TYPE,
|
|
p.PRODUCTLINENAME,
|
|
NVL(wf.WORKFLOWNAME, t.SPECNAME) AS WORKFLOW,
|
|
t.FINISHEDRUNCARD,
|
|
t.TMTT_EQUIPMENTID,
|
|
t.TMTT_EQUIPMENTNAME,
|
|
t.TRACKINQTY,
|
|
t.TRACKINTIMESTAMP,
|
|
m.MOLD_EQUIPMENTID,
|
|
m.MOLD_EQUIPMENTNAME,
|
|
r.LOSSREASONNAME,
|
|
NVL(r.REJECTQTY, 0) AS REJECTQTY
|
|
FROM tmtt_deduped t
|
|
LEFT JOIN product_info p ON t.CONTAINERID = p.CONTAINERID
|
|
LEFT JOIN workflow_info wf ON t.CONTAINERID = wf.CONTAINERID
|
|
LEFT JOIN mold_deduped m ON t.CONTAINERID = m.CONTAINERID
|
|
LEFT JOIN tmtt_rejects r ON t.CONTAINERID = r.CONTAINERID
|
|
ORDER BY t.TRACKINTIMESTAMP
|