2016-11-23 4 views
0

У меня есть таблица в базе данных студентов, которая имеет 49 столбцов. Каждому ученику присваивается уникальный идентификатор. Есть два других столбца для дат. date1 имеет даты, когда запись была вставлена ​​в базу данных. Существует еще один столбец date2, где отображается дата, когда студент зарегистрировался на курс. Кроме того, регистрация студента обрабатывается более одного раза в течение семестра, поэтому есть несколько экземпляров учащегося с разными датами. Я хочу удалить дубликаты из таблицы.Как удалить записи, имеющие одинаковые данные, но разные даты

Таблица похожа на этот

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 

я должен выбрать все записи для идентификатора-Где условия являются «летом 2012», «2012 осенью», «2012 весны» и date1 и date2 наиболее недавно обновленный.

+0

Возможный дубликат [Dedupe и сохранить запись с последней временной меткой] (http://stackoverflow.com/questions/24467428/dedupe-and-retain-record-with-most-recent-timestamp) –

ответ

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 Дата1 Дата2 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 Падение для идентификатора 1. –

+1

@AbdulFattahMohammed. , , Если у вас есть другой вопрос, тогда вы должны задать ему вопрос. –

Смежные вопросы