[英]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.