Заявление SQL для устранения дубликатов на основе значения в другом столбце

У меня есть данные, которые находятся в двух таблицах, и у меня есть запрос, объединяющий данные, как показано ниже. Я пытаюсь исключить дубликаты на основе столбца Id, где я выбираю запись с самой старой датой расписания. Может ли кто-нибудь любезно помочь мне с SQL-выражением для этого?

|ID |SecID |ReportingDate |SplitDate |Adjustor| |1465 |2 |31-Dec-09 |01-Nov-10 |0.1 | |1465 |2 |31-Dec-09 |27-Dec-12 |0.2 | |1466 |2 |31-Dec-10 |27-Dec-12 |0.2 | |1468 |2 |31-Dec-11 |27-Dec-12 |0.2 | |1469 |2 |31-Dec-08 |01-Nov-10 |0.1 | |1469 |2 |31-Dec-08 |27-Dec-12 |0.2 | 

Результат должен быть следующим:

 |ID |SecId |ReportingDate |Adjustor | |1469 |2 |31-Dec-08 |0.1 | |1465 |2 |31-Dec-09 |0.1 | |1466 |2 |31-Dec-10 |0.2 | |1468 |2 |31-Dec-11 |0.2 | 

Больше информации:
Позвольте мне объяснить, что я пытаюсь сделать здесь.

В таблице основных принципов у меня есть строка с уникальным идентификатором строки, secId (идентификатор продукта) и отчетной датой для этой строки.
Эта информация должна быть скорректирована с использованием информации из таблицы splitdetails, которая имеет дату, с которой она становится применимой, значение secId (продукт) и коэффициент регулировки, который будет использоваться.

Для каждой строки в таблице основ:
-Если какой-либо секрет, который не имеет записи в таблице расщепления, то регулятор должен быть 1.
-Если secId присутствует в таблице Splits, разделение, которое будет использоваться, является самым старым, дата которого старше, чем контрольная дата таблицы основных принципов, проверяется.

Я надеюсь получить результаты из вышеприведенного примера, будет выглядеть следующим образом:
| ID | SecId | ReportingDate | Настройщик |
| 1469 2 31-дек-08 0,1
| 1465 2 31-дек-09 0,1
| 1466 2 31-Dec-10 0,2
| 1468 2 31-Dec-11 0,2
| 1467 2 31-дек-12 1

Запрос, который я использую, – это
SELECT Gotten.ID, Gotten.SecID, Gotten.ReportingDate, Gotten.SplitDate, Adjustor
ИЗ
(SELECT tblFundamentalsDetails.id, tblFundamentalsDetails.SecId, tblFundamentalsDetails.ReportingDate, tblSplitDetails.SplitDate, tblSplitDetails.Adjustor FROM tblFundamentalsDetails
LEFT JOIN tblSplitDetails
ON (tblFundamentalsDetails.ReportingDate

Один подход, который должен быть хорошо в Access SQL (хотя вам может понадобиться изменить псевдонимы):

 SELECT a.* FROM Table1 a INNER JOIN ( SELECT ID, sdate = min(SplitDate) FROM Table1 GROUP BY ID ) b ON a.ID = b.ID AND a.SplitDate = b.sdate 

Также вы можете взять внутренний запрос и сделать свой собственный qry в Access.

Для тестовых данных в таблице (или сохраненном запросе) с именем [Источник]

 ID SecID ReportingDate SplitDate Adjustor ---- ----- ------------- ---------- -------- 1465 2 2009-12-31 2010-11-01 0.1 1465 2 2009-12-31 2012-12-27 0.2 1466 2 2010-12-31 2012-12-27 0.2 1468 2 2011-12-31 2012-12-27 0.2 1469 2 2008-12-31 2010-11-01 0.1 1469 2 2008-12-31 2012-12-27 0.2 

следующий запрос был протестирован и фактически работает в Access :

 SELECT Source.ID, Source.SecID, Source.ReportingDate, Source.Adjustor FROM Source INNER JOIN ( SELECT ID, MIN(SplitDate) AS MinOfSplitDate FROM Source GROUP BY ID ) AS MinDate ON MinDate.ID = Source.ID AND MinDate.MinOfSplitDate = Source.SplitDate 

возврате

 ID SecID ReportingDate Adjustor ---- ----- ------------- -------- 1465 2 2009-12-31 0.1 1466 2 2010-12-31 0.2 1468 2 2011-12-31 0.2 1469 2 2008-12-31 0.1 

Я могу сделать это на сервере MySQL, если я понял, что это то, что вам нужно:

 DELETE t1 FROM mytable t1, mytable t2 WHERE t1.ID = t2.ID AND t1.ReportingDate < t2.ReportingDate 

Это приведет только к сохранению строк в моей таблице с самой новой датой и тем же идентификатором

Обратите внимание, что три строки с одинаковым идентификатором станут только одним. Вы будете хранить только одну строку для каждого идентификатора.