gpt4 book ai didi

MySQL Limit 和 Order Left Join

转载 作者:行者123 更新时间:2023-11-28 23:19:53 24 4
gpt4 key购买 nike

我有两个表:Processes 和 Validations; p 和 v 分别。对于每个 过程,都有许多 验证。

目的是:

  • 检索每个流程的最新验证
  • 生成一个下一次验证到期的动态日期 (Due_Date)(365 天)在最近的验证日期之后)。
  • 过滤任何到期的结果当月的日期。

简而言之;我想查看当月应验证哪些流程。

我已完成 99% 的查询代码。阅读了这里的一些帖子后,我相当确定我走在正确的轨道上。我的问题是我的查询仍然返回每个进程的所有结果,而不是前 1 个。

仅供引用:进程表使用“Process_ID”作为主键;而验证表使用“Validation_Process_ID”作为外键。

目前代码:

Select p.Process_ID,
p.Process_Name,
v.Validation_Date,
Date_Add(v.Validation_Date, Interval 365 Day) as Due_Date

From processes_active p

left JOIN processes_validations v
on p.Process_ID = (select v.validation_process_id
from processes_validations
order by validation_date desc
limit 1)

Having Month(Due_Date) = Month(Now()) and Year(Due_Date) = Year(Now())

任何帮助将不胜感激!我可能非常接近,只是无法对最后一部分进行排序!

谢谢

最佳答案

您的实际查询是错误的,子查询将返回验证表中的最新记录,而不是返回每个进程 ID 的最新记录。

你应该分解以获得你需要的东西。

1)计算验证表中每个进程的最新验证:

    SELECT validation_process_id, MAX(validation_date) AS maxdate
FROM processes_validations
GROUP BY validation_process_id

2) 对于进程表中的每个进程,获取最新的验证,并计算下一个验证日期(使用间隔 1 年而不是 365 天......想想闰年)

SELECT p.Process_ID, p.Process_Name, v.maxdate,
Date_Add(v.maxdate, Interval 1 year) as Due_Date
FROM processes_active p
LEFT JOIN
(
SELECT validation_process_id, MAX(validation_date) AS maxdate
FROM processes_validations
GROUP BY validation_process_id
)
ON p.Process_ID = v.validation_process_id

3) 过滤以仅保留本月的 due_date。这可以通过查询 2 上的 WHERE 来完成,我只是做了一个嵌套查询以供您理解

SELECT * FROM 
(
SELECT p.Process_ID, p.Process_Name, v.maxdate,
Date_Add(v.maxdate, Interval 1 year) as Due_Date
FROM processes_active p
LEFT JOIN
(
SELECT validation_process_id, MAX(validation_date) AS maxdate
FROM processes_validations
GROUP BY validation_process_id
)
ON p.Process_ID = v.validation_process_id
) T
WHERE Month(Due_Date) = Month(Now()) and Year(Due_Date) = Year(Now())

关于MySQL Limit 和 Order Left Join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42200464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com