簡體   English   中英

MySQL 限制和左連接順序

[英]MySQL Limit and Order Left Join

我有兩個表:流程和驗證; 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)過濾以僅保留本月的到期日期。 這可以通過查詢 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())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM