2017-07-03 49 views
0

這是我第一篇文章,已經在尋求幫助:/。GROUP BY與MAX(時間戳)在JOIN表

我真的很努力地創造這份報告,我在過去的幾個月裏一直在學習mySQL,我需要幫助。

我有4個表有外鍵和總之我需要檢索的地方最近的創建日期的表2的值:

表1

ID created   Date2 Amount foreignkey1 
1 6/14/17 12:08 7/13/17 0  3112602 
2 6/14/17 12:08 7/20/17 0  3112602 
3 6/14/17 12:08 7/20/17 1000 3112602 
4 6/14/17 12:18 7/20/17 3631 3112602 
5 6/14/17 13:06 7/20/17 6483 3112602 
6 6/2/17 10:06 7/1/17 0  3099667 
7 6/2/17 10:06 7/16/17 0  3099667 
8 6/30/17 6:54 7/16/17 10163 3099667 
9 6/30/17 6:55 7/16/17 10163 3099667 

表2

ID Created  Date3 foreignkey2 
1 10/4/11 17:46 NULL 1373280 
2 2/6/12 21:10 NULL 1373280 
3 11/16/12 20:23 NULL 1373280 
4 3/19/13 12:03 NULL 1373280 
5 5/27/17 7:48 NULL 1373280 
6 5/30/17 13:56 NULL 1373280 
7 5/30/17 14:32 7/1/17 1373280 
8 6/2/17 8:06  7/16/17 1373280 
8 3/19/09 16:34 NULL 1372612 
8 1/18/17 18:12 NULL 1372612 
8 6/14/17 6:24 7/20/17 1372612 

表3

ID foreignkey1 foreignkey2 
1 1372612  3112602 
2 1373280  3099667 

表4

ID foreignkey1 country 
1 1372612  Mordor 
2 1373280  Mordor 

我需要的是檢索像這樣的查詢:

foreignkey1 foreignkey2 date2  date3 country 
3112602  1372612  7/20/17  7/20/17 Mordor 
3099667  1373280  7/16/17  7/16/17 Mordor 

我需要加入使用表3兩外鍵和檢索WHERE創建既DATE2和DATE3每張桌子上最近的日期。

我想是這樣的:

SELECT tb1.foreignkey1, tb2.foreignkey2, tb1.date2, tb2.date3, tb3.country FROM table1 tb1 
    LEFT JOIN table3 tb3 on tb1.foreignkey1=tb3.foreignkey1 
    LEFT JOIN table2 tb2 on tb2.foreignkey2=tb3.foreingkey2 
    LEFT JOIN table4 tb4 on tb2.foreignkey1=tb4.foreingkey4 
WHERE tb1.created>"2017-06-01" AND tb4.country="Mordor" AND tb1.created IN (SELECT MAX(ca.created)) AND tb2.created = (SELECT MAX(tb2.created)) AND tb1.date2 >"2017-06-01" AND tb2.date3 >"2017-06-01" GROUP BY cu.ID; 

不幸的是我沒有在這個使命,我需要幫助:(

感謝

回答

0

開始通過獲取與數據的成功!從每個表MAX(創建)日期,然後加入到該表,例如:

SELECT foreignkey1 , 
    foreignkey2 , 
    date2 , 
    date3 , 
    country 
FROM (SELECT MAX(id) AS id , 
       foreignkey1 , 
       MAX(created) AS created , 
       MAX(date2) 
     FROM  table1 
     GROUP BY foreignkey1 
    ) t1 
    JOIN table3 t3 ON t3.foreignkey1 = t1.foreignkey1 
    JOIN (SELECT MAX(id) AS id , 
        foreignkey2 , 
        MAX(date3) , 
        MAX(created) AS created 
      FROM  table2 
      GROUP BY foreignkey2 
     ) t2 ON t2.foreignkey2 = t3.foreignkey2 
    JOIN table4 t4 ON t4.foreignkey1 = t1.foreignkey1; 

被加入,因爲我沒有重新在我的電腦上的數據,但這是去做一個辦法,我可能會關閉......

+1

真棒!這有助於理解子查詢。我現在能夠完成查詢並獲取所需的數據。 非常感謝! :d –

0

可能是你有一些問題與第

SELECT 
     tb1.foreignkey1 
     , tb2.foreignkey2 
     , tb1.date2 
     , tb2.date3 
     , tb4.country 
    from table1 tb1 
    left join table3 tb3 on tb1.foreignkey1=tb3.foreignkey2 
    left join table2 tb2 on tb2.foreignkey2=tb3.foreingkey1 
    left join table4 tb4 on tb3.foreignkey1=tb4.foreingkey1 
    WHERE tb1.created>"2017-06-01" 
    AND tb4.country="Mordor" 
    AND tb1.created IN (SELECT MAX(ca.created)) 
    AND tb2.created = (SELECT MAX(tb2.created)) 
    AND tb1.date2 >"2017-06-01" AND tb2.date3 >"2017-06-01" 
    GROUP BY cu.ID;