Таблица запросов на основе входного параметра

У меня есть входной параметр для запроса, который я пытаюсь написать. В принципе, if mostRecentSnapshot == true тогда я хочу выбрать только самые последние записи из процесса запуска (в основном where max(creationDate)) а также if mostRecentSnapshot == false затем select creationDate и другие колонки нормально.

Для меня имеет смысл сделать это if заявление в 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

1 ответ

Решение

Запрос может возвращать только фиксированный набор столбцов. Возможно, следующее делает то, что вы хотите:

select paid.*
from reporting_audit.processaudititerationdetail paid
where (not v_mostRecentSnapshot) or
      paid.creation_date = (select max(paid2.creationDate from reporting_audit.processaudititerationdetail paid2);

Он будет выбирать все записи из таблицы или только те записи, которые имеют самые последние creationDate,

Другие вопросы по тегам