Если ord_id
увеличивается вместе с датой (как обычно), тогда работает простая агрегация.
select product_id, city, max(ord_id)
from tbl_ord
group by product_id, city;
В противном случае типичный метод будет использовать row_number()
:
select o.*
from (select o.*,
row_number() over (partition by product_id, city order by date desc) as seqnum
from tbl_ord o
) o
where seqnum = 1;
В более старых версиях MySQL коррелированный подзапрос является хорошим маршрутом.Но если вы хотите ровно одну строку для каждого продукта и города, используйте ord_id
:
select o.*
from tbl_ord o
where o.ord_id = (select o2.ord_id
from tbl_ord o2
where o2.product_id = o.product_id and o2.city = o.city
order by o2.date desc
limit 1
);