mysql - 根据输入参数查询表

标签 mysql conditional-statements

我有一个要编写的查询的输入参数。基本上,ifmostRecentSnapshot == true那么我只想从进程运行中选择最新的记录(基本上where max(creationDate))和ifmostRecentSnapshot = = false 然后正常选择creationDate和其他列。

对我来说,在 from 子句中执行此 if 语句是有意义的,但我认为这是不可能的。通常我会使用 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

最佳答案

查询只能返回一组固定的列。也许以下内容可以满足您的要求:

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 的记录。

关于mysql - 根据输入参数查询表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41637309/

相关文章:

c# - 是否只有在条件为真时才从函数返回的单行语句?

java - 我破坏了 Java while() 循环 - 在错误的条件下触发并在正确的条件下卡住

mysql - 将邮件放入 Rails : Pop3/Imap or direct MySQL query? 的速度更快

php - 链接两个表中的信息

mysql - 计数函数 - Codeigniter 和 MySQL

angular - 如何检查来自父路由器或父路由器的事件子路由器?

mysql - mysql中基于条件的子查询的输出

mysql - Sequelize.js - 根据列值查找行的排名

php - 我如何在同一张表中处理带有标签的帖子和带有类别的帖子之间的关系

ios - 如何在Swift 5中检查3个变量是否彼此相等?