2016-11-23 41 views
0

我有一個包含49列的學生數據庫中的表。每個學生都被分配一個唯一的ID。還有其他兩列日期。 date1具有將記錄插入到數據庫中的日期。還有另一列日期2,顯示學生註冊課程的日期。另外,學生的註冊在本學期內處理不止一次,因此有多個不同日期的學生。我想從表中刪除重複項。如何刪除具有相同數據但日期不同的記錄

表類似於這樣

id   Date1  Date2  TERM_CODE TERM 
1  2016-07-06 2011-11-01 201210  2012 Spring 
2  2016-07-06 2011-11-17 201210  2012 Spring 
4  2016-07-06 2011-11-17 201210  2012 Spring 
3  2016-07-06 2011-11-17 201210  2012 Spring 
1  2016-07-16 2011-11-09 201210  2012 Spring 
2  2016-07-16 2011-11-17 201210  2012 Spring 
1  2016-07-16 2011-11-01 2Summer 
1  2016-07-06 2011-11-13 2Summer 
1  2016-07-16 2011-11-03 201260  2012 Fall 
1  2016-07-06 2011-11-17 201260  2012 Fall 

我不得不選擇ID 1中的所有記錄,其中的條件是「2012夏」,「2012秋季」,「2012年春季」和日期1和date2是最最近更新了一個。

+0

可能重複[Dedupe並保留記錄與最新的時間戳](http://stackoverflow.com/questions/24467428/dedupe-and-retain-record-with-most-recent-time-stamp) –

回答

1

從描述中,我認爲最近更新意味着date2。如果是這樣,一個方法是使用窗口功能:

select t.* 
from (select t.*, 
      row_number() over (partition by id order by date2 desc, date1 desc) as seqnum 
     from t 
    ) t 
where seqnum = 1; 

這保證每id只有一行,即使學生有同樣的date2多行。

比較傳統的SQL方法:

select t.* 
from t 
where t.date2 = (select max(t2.date2) 
       from t t2 
       where t2.id = t.id); 

將返回重複,如果學生曾與同date2值的多個記錄。

+0

這就像一個工作魅力!非常感謝。我也有很多這樣的表格。我必須從多個表中取消複製並將完整數據保存在單個表中。 –

+0

這方面的另一種情況。我必須去除數據的重複,而且我必須從表格中選擇兩個具有不同術語的記錄。該表看起來類似於: id Date1 Date2 TERM_CODE TERM 1 2016-07-06 2011-11-01 201210 2012春季 2 2016-07-06 2011-11-17 201210 2012春季 1 2016-07- 16 2011-11-13 201260 2012年秋季 1 2016-07-16 2011-11-17 201260 2012年秋季 所以現在,我必須選擇所有最大(date2)和期限爲2012年春季和2012年的記錄秋季爲id 1. –

+1

@AbdulFattahMohammed。 。 。如果你有另一個問題,那麼你應該問這個問題。 –

相關問題