簡體   English   中英

MySQL-LEFT JOIN基於datetime列的最新記錄

[英]MySQL - LEFT JOIN most recent record based on datetime column

我正在嘗試根據相關表中的DATETIME列來LEFT JOIN最近的相關記錄。

最近的記錄不是最新插入的記錄。 date列會定期更新,而這正是我要加入的列。

我無法使用job_id的子查詢來執行此操作,因為返回的job_id與最近submitted日期不符。

SELECT o.id, j.submitted, j.id AS job_id
FROM orders o
LEFT JOIN (
    SELECT id, order_id, MAX(submitted) AS submitted
    FROM jobs
    GROUP BY order_id
) j ON j.order_id = o.id

我還嘗試了WHERE子句中的子查詢,但這會過濾結果,以便僅返回帶有job orders 我需要沒有jobs orders作為結果集的一部分。

SELECT o.id, j.submitted, j.id AS job_id
FROM orders o
LEFT JOIN jobs j ON j.order_id = o.id
WHERE j.submitted = (
    SELECT MIN(submitted)
    FROM jobs
    WHERE order_id = o.id
)

嘗試這個:

SELECT o.id, j.submitted, j.id AS job_id
FROM orders o
LEFT JOIN jobs j ON j.order_id = o.id
WHERE j.submitted = (
    SELECT MAX(submitted) FROM jobs
)

這個怎么樣?

SELECT o.id, max(j.submitted), j.id AS job_id
FROM orders o
LEFT JOIN jobs j on (j.order_id = o.id)
GROUP BY o.id, j.id
ORDER BY o.id

該查詢將輸出每個訂單及其最近的工作。 如果沒有與之相關的作業,則已提交和作業列將被空白。

試試這個查詢

    SELECT 
    o.id AS orderId, recentOrderInner.*
FROM
    orders o
        LEFT JOIN
    (SELECT 
        j.order_id, j.submitted AS recent_order
    FROM
        job j
    LEFT JOIN job j_l ON (j.order_id = j_l.order_id
        AND j.submitted < j_l.submitted)
    WHERE
        j_l.submitted IS NULL
    ORDER BY aul.created DESC) AS recentOrderInner ON o.id = recentOrderInner.order_id

正確的方法是使用兩個聯接,而不是一個:

select . . . 
from orders o left join
     jobs j
     on o.id = j.order_id left join
     (select j2.order_id, max(j2.submitted) as max_submitted
      from jobs j2
      group by j2.order_id
     ) j2
     on j2.order_id = j.order_id and j2.max_submitted = j.max_submitted;

暫無
暫無

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

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