У меня есть таблица клиентов и таблица подробностей.SQL Left join: выбор последних записей в отношениях «один ко многим»
Я хочу, чтобы вытащить запись для каждого клиента в таблице и показать последние подробные данные об этом клиенте, где это применимо.
В настоящее время мое предложение where отфильтровывает клиентов.
Я попытался переместить предложение where в левое внешнее соединение, но я не смог получить желаемый результат.
Это не похоже на фильтрацию продукта, когда я запускаю запрос.
SELECT
cust.Customer
, cust.Company
, inv.Date
, inv.Product
, inv.Units
, inv.Extended
FROM
customerlist cust
LEFT OUTER JOIN
detail inv
ON
cust.customer = inv.customer
LEFT OUTER JOIN
detail inv2
ON
inv.customer = inv2.customer
AND (
inv.date < inv2.date
OR inv.date = inv2.date AND inv.customer < inv2.customer
)
WHERE
(
inv.Product = 'CC'
OR inv.Product = 'CG'
OR inv.Product = 'CH'
)
AND inv2.customer IS NULL
Мой вопрос похож на
SQL join: selecting the last records in a one-to-many relationship
Пытаюсь за то же самое просто хочу, чтобы включить каждого клиента и фильтр по продукту.
Update
Выборочные данные
Вот мой исходный запрос, который отлично, за исключением я пропускаю клиентов
Если удалить, где положение и вставьте его в левое соединение следующим образом:
LEFT OUTER JOIN
detail inv2
ON
inv.customer = inv2.customer
AND (
inv.date < inv2.date
OR inv.date = inv2.date AND inv.customer < inv2.customer
)
AND (
inv.Product = 'CC'
OR inv.Product = 'CHECK'
OR inv.Product = 'ACH'
)
Вот результат Появились столбцы товаров, которые не являются «CC» и т. Д. И клиенты дублируются.
Может ли это делать это: И inv2.customer IS NULL – logixologist
Какие RDMS вы используете (Sql-сервер, mysql, oracel)? – Arion
Можете ли вы разместить некоторые данные образца? – logixologist