У меня есть две таблицы с отношением «один ко многим» (например, таблица клиентов и таблица заказов, каждый клиент может разместить несколько заказов). Для каждого клиента мне нужно получить только один заказ, определенный определенным критерием (например, самым последним заказом).SQL: получить последний заказ для каждого клиента
Мне нужно сделать это как в PostgreSQL 9.1, так и в Microsoft SQL Server 2014 (разные данные в двух системах, но с той же проблемой). Таблицы составляют около 2,5 миллионов записей (клиентов) и 10 миллионов записей (заказов).
Я думал об использовании внешнего приложения на SQL-сервере и занимал место над разделом или боковыми соединениями в PostgreSQL, но не слишком уверен в синтаксисе.
Простой max(order_date)
... group by clientid
будет недостаточно, потому что мне нужны все поля из таблицы заказов. Например, мне нужен выход, такой как
c.clientid, c.client_name, o.order_id, o.order_date, o.order_amount, o.product_ordered
where c = the clients table and o = the orders table.
Любые предложения?
С помощью Postgres вы можете сделать то же самое, используя 'join lateral' (который является стандартом ANSI для Microsoft, называемым' apply'), действительно будет интересным, если это будет работать лучше. –
@Pythonista анонимный, как вы в конечном итоге решили проблему? Было ли какое-либо из предлагаемых предложений полезным для вас? Если да, пожалуйста, поддержите их и примите ответ, который был наиболее полезен. –