У меня есть входной параметр для запроса, который я пытаюсь написать. В основном, if mostRecentSnapshot == true
, тогда я хочу выбрать только самые последние записи из процесса (в основном where max(creationDate)
) и if mostRecentSnapshot == false
, затем select creationDate
и другие столбцы нормально.Таблица запросов на основе входного параметра
Для меня имеет смысл сделать это заявление from
, но я не думаю, что это возможно. Обычно я бы использовал CTE, но я этого не имею в MySQL.
Каков наилучший способ достичь этого?
Было бы что-то вдоль линий этого:
SELECT
CASE mostRecentSnapshot WHEN FALSE THEN
(
processauditheader.creationDate as processCreationDate,
processauditheader.processName,
processauditheader.processType,
processauditheader.processHost,
processauditheader.processDatabase,
processauditheader.tableAudited,
processauditheader.processInvokedByName,
processauditheader.processInvokedByType,
processauditheader.processInvokedByDatabase,
processauditheader.processIntervalValue,
processauditheader.processIntervalField,
processauditheader.auditScenarios,
processaudititerationdetail.creationDate as iterationDate,
processaudititerationdetail.connectionId,
processaudititerationdetail.processDate,
processaudititerationdetail.tableRowCount,
processaudititerationdetail.tableRowCountLastDay,
processaudititerationdetail.previousProcessAuditIterationDetailID,
processauditmetricdetail.creationDate,
processauditmetricdetail.processAuditIterationDetailID,
processauditmetricdetail.auditMetric,
processauditmetricdetail.auditTotal,
processauditmetricdetail.auditExample
)
WHEN TRUE THEN
(
((SELECT MAX(processaudititerationdetail.creationDate) as maxSnapshot,
processaudititerationdetail.id
from reporting_audit.processaudititerationdetail
group by processaudititerationdetail.creationDate) mostRecent
JOIN reporting_audit.processaudititerationdetail ON mostRecent.id = processaudititerationdetail.id)
)
END
FROM reporting_audit.processauditheader
JOIN processaudititerationdetail ON processaudititerationdetail.processAuditHeaderID = processauditheader.id
LEFT JOIN processauditmetricdetail ON processauditmetricdetail.processAuditIterationDetailID = processaudititerationdetail.id
Вот что я придумал:... '' 'выберите заголовок * итерацию *, метрика * из reporting_audit.processauditheader заголовка присоединиться к processaudititerationdetail итерации на iteration.processAuditHeaderID = header.id покинул присоединиться processauditmetricdetail метрики metric.processAuditIterationDetailID = iteration.id где (не @mostRecentSnapshot) или iteration.processDate IN (выберите max (iteration2.processDate) from report_audit.processaudititerationdetail iteration2 GROUP BY iteration2.processAuditHeaderId) '' ' – Ted