2016-12-02 97 views
0

我有這樣的一個表:選擇具有一個最大日兩個不同的列

ID DATE  TableName 
X 29-Jan-12 A 
X 29-Feb-12 B 
X 29-Jan-12 C 
Y 18-Nov-12 A 
Z 18-Nov-14 C 
X 17-Nov-13 D 
Z 14-May-12 A 
Y 18-Nov-13 D 

我想MAXDATE獲取唯一的ID,這樣的輸出應該像這個 -

ID DATE TableName 
Z 18-Nov-14 C 
Y 18-Nov-13 D 
X 17-Nov-13 D 

我使用select ID, MAX(DATE), TableName from table但這並不能給我所需的輸出。

+0

什麼是您正在使用的RDBMS? –

+0

這裏的課程:如果您沒有選擇正確的數據庫產品,那麼另一個產品專家的人可能會關閉您的問題。 @Barmar關閉了這個問題,並鏈接到一個特定於MySQL的較舊的問題;在那個較老的問題中沒有顯示Oracle(例如)中存在但不存在於MySQL中的答案,但是誰在乎。很明顯,不是Barmar。 – mathguy

+0

這是一個Oracle重複:http://stackoverflow.com/questions/121387/fetch-the-row-which-has-the-max-value-for-a-column?rq=1 – Barmar

回答

1

可以在條款上通過 子選擇組如果您使用的是分貝,允許使用一個元組

select id, date, tableName 
from my_table 
where (id, date) in (select id, max(date) 
        from my_table 
        group by id); 

,或者如果DB不允許元組,你可以使用一個內連接

select id, date, tableName 
from my_table a 
inner join (select id, max(date) max_date 
        from my_table 
        group by id) t on t.id = a.id and t.max_date = a.date; 
1

甲骨文答案:

你所缺的是拿起那肺心病tablename對每組內的max(date)作出響應。

即與keep (dense_rank last...)最高效地完成像這樣:(注 - DATE是Oracle的保留字,所以我希望你的列名不DATE和你使用的只是作爲一個佔位符......)

select id, max(date) as date, 
     max(tablename) keep (dense_rank last order by date) as tablename 
from  table_like_this 
group by id; 

Oracle文檔(用於FIRST,但是讀取文本,它也指LAST) https://docs.oracle.com/cloud/latest/db112/SQLRF/functions065.htm#SQLRF00641

相關問題