Если вы используете MySQL 8+, то ROW_NUMBER
- это путь к go здесь:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY Delivery, Product, Region
ORDER BY Updated DESC) rn
FROM daily
)
SELECT `Contract Date`, Delivery, Product, Region, Price, Updated
FROM cte
WHERE rn = 1;
Будет подсчитан номер строки выше, начиная с 1 с самого последнего обновления запись, для каждой группы доставки / продукта / региона записи. Затем мы запрашиваем у CTE сохранение только самой последней записи для каждой группы.
На всякий случай, если вы используете более раннюю версию MySQL, есть еще один способ сделать это:
SELECT d1.`Contract Date`, d1.Delivery, d1.Product, d1.Region, d1.Price, d1.Updated
FROM daily d1
INNER JOIN
(
SELECT Delivery, Product, Region, MAX(Updated) AS MaxUpdated
FROM daily
GROUP BY Delivery, Product, Region
) d2
ON d1.Delivery = d2.Delivery AND
d1.Product = d2.Product AND
d1.Region = d2.Region AND
d1.Updated = d2.MaxUpdated;