2015-01-08 110 views
0

這是我的示例表:從表中選擇最新的重複記錄的MySQL

表1:

ID  Runnum Thickness   Date 

1   2   1.23    1/8/2015 

2   2   2.32    1/9/2015 

3   3   2.21    1/9/2015 

4   4   3.12    1/8/2015 

表2

ID  Runnum Insitu    

1   2   1.23    

2   3   2.32    

3   4   2.21    

4   5   3.12   

結果,我想:

Runnum Insitu Runnum Thickness Date

2  1.23  2   2.32    1/9/2015 

3  2.32  3   2.21    1/9/2015 

4  2.21  4   3.12    1/8/2015 

我想加盟Table 1和Table,並與最新的記錄選擇重複, 這是我的查詢爲止。

SELECT a.Runnum, a.insitu, b.Runnum, b.thickness 
FROM test.dummy_ease a 
INNER JOIN (SELECT runnum, thickness, times FROM test.dummy_xrf group by runnum) AS b 
ON a.runnum = b.runnum 

從該查詢返回的值幾乎是正確的,除了重複值不返回最新的值。

回答

1

我認爲ID從表1設置爲AUTO_INCREMENT和最近一個也是基於這個標準,那麼你必須自己加入table1的最新數據

select a.Runnum, 
b.insitu, 
b.Runnum Runnumb, 
a.Thickness 
from Table1 a 
join (select max(ID) ID ,Runnum 
     from Table1 
    group by Runnum) a1 
using(ID,Runnum) 
join Table2 b ON a.Runnum = b.Runnum 

DEMO

如果最近的一個依賴在最近的日期標準,然後在內部查詢中,你必須選擇你的日期列的最大值,但從你的樣本數據,它看起來像你已經將日期存儲爲varchar類型,它不會被視爲日期對象,你必須首先將它轉換爲日期對象使用str_to_date然後計算日期和再次加入你的table1查詢將會類似Demo

+0

你好,我的日期列存儲爲DATE類型。是的,ID是自動增量,謝謝你的建議!我會試試看! – ellabells

+0

也想問一下'USING'的用法@M Khalid – ellabells

+0

@ellabells如果兩個表有一些相似的列名,像table1和table2中的pid一樣用於連接,那麼你可以使用'using(pid)',這是相等的到'on(table1.pid = table2.pid)'它只是縮短查詢部分,但你應該使用'on()'作爲最佳實踐 –