我需要一些幫助來處理我正在處理的MySQL查詢。我有如下數據。基於最高日期和非唯一列的MySQL JOIN
表1
id date1 text number
---|------------|--------|-------
1 | 2012-12-12 | hi | 399
2 | 2011-11-11 | so | 399
5 | 2010-10-10 | what | 555
3 | 2009-09-09 | bye | 300
4 | 2008-08-08 | you | 300
表2
id number date2 ref
---|--------|------------|----
1 | 399 | 2012-06-06 | 40
2 | 399 | 2011-06-06 | 50
5 | 555 | 2011-03-03 | 60
對於表1中的每一行,我想從表2中的零個或一個參考值應該有一個行中的結果對於表1中的每一行,數字列對於任何表都不是唯一的,因此必須使用date1 & date2列進行連接,其中date2是數字的最大值,對於該數字不超過date1。
以上例子的預期結果就像這樣。
date1 text number ref
------------|--------|--------|-----
2012-12-12 | hi | 399 | 40
2011-11-11 | so | 399 | 50
2010-10-10 | what | 555 | null
2009-09-09 | bye | 300 | null
2008-08-08 | you | 300 | null
您可以將結果的第一行中所看到的,裁判40被選中,是因爲在表2與REF = 40的記錄有date2的是,這是不到DATE1,並能夠滿足該條件的最高日期。 在結果的第二行中,ref爲50,因爲在table2中ref = 50的記錄的date2小於date1,並且滿足該條件的最高日期。 結果的其餘部分具有空引用,因爲date1總是少於或者表2中不存在對應的數字。
我已經到了一定的地步,但我被卡住了。我到目前爲止的查詢是這樣的。
SELECT date1, text, number, ref
FROM table1
LEFT JOIN (
SELECT *
FROM (
SELECT *
FROM table2
WHERE date2 <= '2012-12-12'
ORDER BY date2 DESC
) tmp
GROUP BY msisdn
) tmp ON table1.number = table2.number;
的問題是硬編碼的日期不會做,應該根據日期1,但因爲它是在外部查詢我不能使用日期1。有什麼方法可以使這項工作?