2011-06-09 32 views
1

我需要一些幫助來處理我正在處理的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。有什麼方法可以使這項工作?

回答

1

我試着用不同的表類似的例子剛纔,並能得到你想要的通緝。下面是一個類似的查詢修改,以滿足您的需求。如果您正在尋找,您可能需要更改<<=

SELECT a.date1, a.text, b.ref 
FROM table1 a LEFT JOIN table2 b ON 
         (a.number = b.number 
          AND a.date1 > b.date2 
          AND b.date2 = (SELECT MAX(x.date2) 
              FROM table2 x 
              WHERE x.number = b.number 
              AND x.date2 < a.date1) 
         ) 
0

未經測試:

SELECT t1.date1, 
     t1.text, 
     t1.number, 
     (SELECT a.ref 
      FROM TABLE_2 a 
      JOIN (SELECT t.number, 
         MAX(t.date2) AS max_date 
        FROM TABLE_2 t 
       WHERE t.number = t1.number 
        AND t.date2 <= t1.date1 
       GROUP BY t.number) b ON b.number = a.number 
            AND b.max_date = a.date2) 
    FROM TABLE_1 t1 

的問題是使用中的子查詢的派生表t1 ...