2013-11-25 77 views
-1

我有兩個表,SQL加入其中id等於ID和日期是最大

---Jobs--- 
id,name,..... 

---Locations--- 
id,jobId,Location,date 

現在的工作能有一個以上的位置,我想加入的工作與它的最新的位置在那裏jobs.id=location.jobIddate是最大。

+5

你也有問題嗎? (希望不僅僅是'爲我做') –

+1

你已經知道你想使用sql連接。快速谷歌搜索提供了第1頁上的20個條目,其中介紹瞭如何完全按照您的要求進行連接。 – Dave

+0

這不是很清楚,但我猜他/她的問題是如何獲得最新的位置,而不是實際的加入? – Shai

回答

0

可能是:

SELECT * 
FROM Jobs J, Locations L 
WHERE J.id=L.jobId 
AND L.date = (
    SELECT MAX(date) 
    FROM Locations L2 
    WHERE L2.jobId=L.jobId 
    GROUP BY L2.jobId) 

說明:

在嵌套查詢我選擇爲每個作業的最大日期。

在外部查詢我加入兩個表,只提取日期等於MAX(日期)我發現嵌套查詢和作業是相同的行。這是由條件L2.jobId = L.jobId

+0

我得到這個錯誤 #1267 - 排序規則的非法組合(utf8_unicode_ci ,IMPLICIT)和(utf8_general_ci,IMPLICIT)進行操作'=' – user3032474

+0

是的,我可能忘記了使用Group By。查詢已更新。 順便說一句,錯誤看起來像你的表有不同的排序規則。一個有utf8_unicode_ci,另一個有utf8_general_ci。儘量讓他們相同的排序規則。這裏解釋http://stackoverflow.com/questions/1241856/illegal-mix-of-collat​​ions-error-in-mysql –

+0

雅改爲排序和它的工作,謝謝 – user3032474

0

試試這個:

select * from jobs inner join locations on jobs.id=locations.jobid order by date desc limit 1; 
+0

同 我得到這個錯誤 #1267 - 非法的歸類組合(utf8_unicode_ci,隱含的)和(utf8_general_ci,隱含的)操作「=」 – user3032474