Я пытаюсь оптимизировать SQL-запрос для базы данных Advantage 11.Короче говоря, я пытаюсь построить запрос, чтобы вычислить общее количество шагов в производственной последовательности и количество выполненных шагов.Система поддерживает несколько «выпусков» для каждого задания и несколько сборочных узлов для каждого выпуска.Есть несколько таблиц, которые содержат различные значения, необходимые для запроса.У меня есть запрос, который работает, но это медленный путь для программного использования.Используемые таблицы базы данных:
inproces (releases that are in process)
H-JOB# HPROC-SEQ
ABC-0100-001 101
ABC-0100-002 101
DEF-0100-001 205
ABC-0100-001P1 302
release (main release information, including release status)
R-JOB# R-TRACKING-NBR R-RELEASE-STATUS
ABC-0100 ABC-0100-001 Y
ABC-0100 ABC-0100-002 Y
DEF-0100 DEF-0100-001 Y
GHI-0100 GHI-0100-002 N
pnlrel (sub-assembly release information, including release status)
P-JOB-NBR P-TRACKING-NBR P-RELEASED-FLAG
ABC-0100 ABC-0100-001P01 Y
DEF-0100 DEF-0100-001P01 Y
GHI-0100 GHI-0100-002P01 N
travdet (process steps per job, per sequence)
Job-# Process-Sequence Gate ID
ABC-0100-001 101 IS
ABC-0100-001 101 DR
ABC-0100-001 101 PL
ABC-0100-001 101 SM
ABC-0100-001 101 GN
ABC-0100-001 103 IS
ABC-0100-001 103 DR
ABC-0100-001 103 PL
ABC-0100-001 103 SM
ABC-0100-002 101 IS
ABC-0100-002 101 DR
ABC-0100-002 101 PL
ABC-0100-002 101 SK
DEF-0100-001 205 AB
DEF-0100-001 205 CD
DEF-0100-001 205 EF
DEF-0100-001 205 GH
DEF-0100-001 205 IJ
DEF-0100-001 212 AB
DEF-0100-001 212 CD
DEF-0100-001 212 EF
DEF-0100-001 212 GH
DEF-0100-001 212 IJ
ABC-0100-001P1 302 QR
ABC-0100-001P1 302 ST
ABC-0100-001P1 302 UV
ABC-0100-001P1 302 WX
ABC-0100-001P1 302 YZ
ABC-0100-001P1 309 QR
ABC-0100-001P1 309 ST
ABC-0100-001P1 309 UV
ABC-0100-001P1 309 WX
ABC-0100-001P1 309 YZ
detail (process steps completed per release)
D-JOB# D-DEST
ABC-0100-001 IS
ABC-0100-001 DR
ABC-0100-001 PL
DEF-0100-001 AB
DEF-0100-001 CD
DEF-0100-001 EF
DEF-0100-001 GH
ABC-0100-001P1 QR
ABC-0100-001P1 ST
ABC-0100-001P1 UV
ABC-0100-001P1 WX
ABC-0100-001P1 SK
history (current process step)
S-JOB# S-GATE
ABC-0100-001 IJ
ABC-0100-002 SK
DEF-0100-001 GH
ABC-0100-001P1 SK
Таким образом, для каждой записи в "inproces":
Определите, действительно ли релиз выпущен (и не отменен), проверивrelease.R-RELEASE-STATUS = Y (для основных выпусков) или pnlrel.P-RELEASED-FLAG = Y (для подузлов).Я объединил два запроса вместе, чтобы охватить оба эти критерия, поскольку выпуск будет либо в таблице выпуска ИЛИ pnlrel, но не в обоих.
Проверка шага процесса "SK", который будет указыватьон был перенесен на склад.
В конечном итоге, если эти требования будут выполнены, мне необходимо подсчитать количество шагов процесса в соответствующей последовательности процессов из travdet и количество завершенных шагов процесса из деталей..
Используемый запрос:
select inproces."H-JOB#" as job, count(distinct travdet."GATE ID") as ttl , count(distinct detail."D-DEST") as comp
from inproces
left join release on inproces."H-JOB#" = release."R-TRACKING-NBR"
left join travdet on release."R-JOB#" = travdet."JOB-#" and inproces."H-PROC-SEQ" = travdet."Process-Sequence"
left join detail on detail."D-JOB#" = inproces."H-JOB#" and detail."D-DEST" <> ''
left join history on inproces."H-JOB#" = history."S-JOB#" and history."S-GATE" <> 'SK'
where release."R-RELEASE-STATUS" = 'Y'
group by job
union
select inproces."H-JOB#" as job, count(distinct travdet."GATE ID")as ttl, count(distinct detail."D-DEST") as comp
from inproces
left join pnlrel on inproces."H-JOB#" = pnlrel."P-TRACKING-NBR"
left join travdet on pnlrel."P-JOB-NBR" = travdet."JOB-#" and inproces."H-PROC-SEQ" = travdet."Process-Sequence"
left join detail on detail."D-JOB#" = inproces."H-JOB#" and detail."D-DEST" <> ''
left join history on inproces."H-JOB#" = history."S-JOB#" and history."S-GATE" <> 'SK'
where pnlrel."P-RELEASED-FLAG" = 'Y'
group by job
Вывод (для данных из таблиц образцов):
job ttl comp
ABC-0100-001 5 3
DEF-0100-001 10 4
Обратите внимание, чтоABC-0100-002 и ABC-0100-001P1 исключены, потому что их GATE ID = "SK".
Буду очень признателен за советы о том, как повысить производительность этого запроса!