Эта версия:
DELETE * FROM [PO Data] AS P1
WHERE [PO Number] = [PO Number] AND
[Invoice Date] <> (SELECT MIN([Invoice Date])
FROM [PO Data] AS P2
WHERE P1.[PO Number] = P2.[PO Number]
);
Имеет пару странных вещей.Почему [PO Number] = [PO Number]
?Почему <>
?
Рассмотрите этот запрос:
DELETE * FROM [PO Data] AS P1
WHERE [Invoice Date] > (SELECT MIN([Invoice Date])
FROM [PO Data] AS P2
WHERE P1.[PO Number] = P2.[PO Number]
);
Чтобы ускорить этот запрос, вам нужен индекс для [PO Data]([PO Number], [Invoice Date])
.
РЕДАКТИРОВАТЬ:
Если вы хотите самую раннюю дату счета в целом , просто удалите предложение о корреляции:
DELETE * FROM [PO Data] AS P1
WHERE [Invoice Date] > (SELECT MIN([Invoice Date])
FROM [PO Data] AS P2
);