Я пытаюсь разработать запрос SQL Server 2005, но в данный момент у меня ничего не получается. Я пробовал все известные мне разные подходы, например производные таблицы, подзапросы, CTE и т. Д., Но я не смог решить проблему. Я не буду публиковать запросы, которые попробовал здесь, потому что они включают много других столбцов и таблиц, но я попытаюсь объяснить проблему на более простом примере:
Существует две таблицы: PARTS_SOLD
и PARTS_PURCHASED
. Первый содержит продукты, которые были проданы покупателям, а второй содержит продукты, которые были приобретены у поставщиков. Обе таблицы содержат внешний ключ, связанный с самим движением, который содержит даты и т. Д.
Вот упрощенная схема:
Таблица PARTS_SOLD
:
part_id
date
- другие столбцы
Таблица PARTS_PURCHASED
part_id
date
другие столбцы
Мне нужно объединить каждую строку в PARTS_SOLD
с уникальной строкой из PARTS_PURCHASED
, выбранной с помощью part_id
и максимальным значением date
, где "date
" равно перед столбцом "date
" от PARTS_PURCHASED
. Другими словами, мне нужно собирать информацию о последнем событии покупки этого предмета для каждого случая продажи этого предмета.
Сама проблема в том, что я не нашел способа соединить таблицу PARTS_PURCHASED
с таблицей PARTS_SOLD
, используя столбец "date
" из PARTS_SOLD
, чтобы ограничить MAX(date)
PARTS_PURCHASED
таблица.
Я мог бы сделать это с помощью курсора, чтобы решить проблему с известными мне инструментами, но каждая таблица имеет миллионы строк, и, возможно, использование курсоров или подзапросов, которые оценивают запрос для каждой строки, сделает процесс очень медленным .