Удалить запрос, используя COUNT и MIN. MS Access 2010 - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь определить и удалить дубликаты из извлечения данных.

Я настроил запрос для группировки по contract_number и count > 1, который идентифицирует случаи, и есть два contract_start_date, из которых мне нужно удалить самый ранний, поэтому я применил мин.

Я не могу выполнить это как запрос на удаление.Я довольно плохо знаком с Access и SQL Scripts.

SELECT Gas_Data.CONTRACT_NUMBER, 
       Count(Gas_Data.CONTRACT_NUMBER) AS CountOfCONTRACT_NUMBER, 
       Min(Gas_Data.CONTRACT_START_DATE) AS MinOfCONTRACT_START_DATE

FROM Gas_Data

GROUP BY Gas_Data.CONTRACT_NUMBER

HAVING (((Count(Gas_Data.CONTRACT_NUMBER))>1));

Ответы [ 3 ]

0 голосов
/ 19 ноября 2018

Попробуйте этот подход, когда вы в подзапросе идентифицируете те записи , а не , которые должны быть удалены:

DELETE 
    *
FROM 
    Gas_Data
WHERE 
    Gas_Data.CONTRACT_START_DATE Not IN
    (SELECT 
        Max(T.CONTRACT_START_DATE)
    FROM 
        Gas_Data As T
    WHERE 
        T.CONTRACT_NUMBER = Gas_Data.CONTRACT_NUMBER)

Конечно, сначала сделайте резервную копию.

0 голосов
/ 19 ноября 2018

Рассмотрим следующее:

delete from gas_data a 
where exists 
(
    select top 1 * from gas_data b 
    where 
    a.contract_number = b.contract_number and 
    a.contract_start_date < b.contract_start_date
)

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

Всегда сохраняйте резервную копию ваших данных перед выполнением delete запросов.

0 голосов
/ 16 ноября 2018

Попробуйте:

DELETE FROM Gas_Data
WHERE Count(Gas_Data.CONTRACT_NUMBER)>1
...