2015-07-09 77 views
0

表1表的一個子集:創建使用唯一列

+-----+---------+---------+-------------+ 
    ID | Val1 | Val2 | Date 
+-----+---------+---------+-------------+ 
    1 | 10 | 11 | 2015-05-10 
    2 | 10 | 11 | 2015-05-17 
    3 | 10 | 11 | 2015-05-23 
    4 | 9  | 17 | 2015-08-10 
    5 | 9  | 17 | 2015-08-15 
+-----+---------+---------+-------------+ 

表2

+-----+---------+---------+-------------+ 
    ID | Val1 | Val2 | Date 
+-----+---------+---------+-------------+ 
    3 | 10 | 11 | 2015-05-23 
    5 | 9  | 17 | 2015-08-15 
+-----+---------+---------+-------------+ 

我想寫一些SQL,讓我從Table1Table2Table2Table1的子集,只有Val1和Val2的唯一對的最新日期。

爲了讓我從Table1需要,我可以使用VAL1和val2的獨特組合:

SELECT DISTINCT Val1, Val2 
FROM Table1 

,我被困在用獨特的組合,從表1中選擇的子集的一部分。如果我這樣做,這顯然會返回所有結果由表1:

SELECT Val1, Val2, Date 
FROM Table1 
WHERE EXISTS(SELECT DISTINCT Val1, Val2 FROM Table1) 

如果我選擇上,包括日期也將返回他們所有的所有值不同。有沒有人對這個問題有所瞭解?

回答

1

你可以試試這個:

select max(id), val1, val2, max(Date) from table1 
group by Val1, Val2 
+0

優秀,我認爲解決它。謝謝! – bmartin

+2

這假定對於具有不同值'val1'和'val2'的行,具有最大'Date'值的行也具有最大的'ID'值。示例數據顯示這是真實的,但OP沒有提及任何數據關係,如強制執行。因此,根據情況,這可能會給出錯誤的「ID」值,但如果沒有更多信息,我們無法知道。 –