Files
DashBoard/src/mes_dashboard/sql/tmtt_defect/base_data.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