Ich habe einen Eingabeparameter für eine Abfrage, die ich versuche zu schreiben. Grundsätzlich if mostRecentSnapshot == true
dann möchte ich nur die jüngsten Datensätze aus dem Prozess ausführen (im Grunde where max(creationDate)
) und if mostRecentSnapshot == false
dann select creationDate
und andere Spalten normalerweise.Abfragetabelle basierend auf Eingabeparameter
Für mich macht es Sinn, diese if
Erklärung in der from
Klausel zu tun, aber ich denke nicht, dass das möglich ist. Normalerweise würde ich ein CTE verwenden, aber ich existiere nicht in MySQL.
Was ist der beste Weg, dies zu erreichen?
Es wäre etwas entlang der Linien von diesem sein:
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
Hier ist, was ich kam mit:... '' 'select-Header *, Iteration *, metrisch * von reporting_audit.processauditheader Header processaudititerationdetail Iteration auf iteration.processAuditHeaderID = header.id verbinden links processauditmetricdetail metric kommen auf metric.processAuditIterationDetailID = iteration.id wo (nicht @mostRecentSnapshot) oder iteration.processDate IN (wählen Sie max (iteration2.processDate) aus reporting_audit.processaudititerationdetail iteration2 GROUP BY iteration2.processAuditHeaderId) '' ' – Ted