Я знаю, что есть много подобных вопросов. Фактически я использовал this, и он работает, но я не могу понять, как включить записи, которые не совпадают во второй таблице.присоединяйтесь только к последней записи во второй таблице, но включите записи во второй таблице
Я использую образец Northwind db на MS SQL Server.
С помощью этого запроса:
SELECT Customers.CustomerID, Customers.CompanyName, Orders.OrderID, Orders.OrderDate
FROM Customers
LEFT OUTER JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
INNER JOIN
(
SELECT CustomerID, MAX(OrderDate) maxDate
FROM Orders
GROUP BY CustomerID
) b ON Orders.CustomerID = b.CustomerID AND
Orders.OrderDate = b.maxDate
ORDER BY Orders.OrderDate
я получаю правильный результат, но отсутствуют записи, которые не совпадают.
Если я использую LEFT OUTER JOIN вместо INNER JOIN:
SELECT Customers.CustomerID, Customers.CompanyName, Orders.OrderID, Orders.OrderDate
FROM Customers
LEFT OUTER JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
LEFT OUTER JOIN
(
SELECT CustomerID, MAX(OrderDate) maxDate
FROM Orders
GROUP BY CustomerID
) b ON Orders.CustomerID = b.CustomerID AND
Orders.OrderDate = b.maxDate
ORDER BY Orders.OrderDate
я получаю недостающие записи, но в данном случае я повторил имена клиентов.
Я хочу: получить список клиентов только с его последним заказом, и если у него нет порядка, его имя должно присутствовать в любом случае.
Уверены ли вы, что у вас нет дублирующих имен клиентов с внутренним соединением? –
нет, не имеют, просто запускайте с помощью ORDER BY Customers.CustomerID для проверки. – Alexan
похоже, я нашел решение здесь: http://stackoverflow.com/questions/11764413/join-record-with-most-recent-record-on-second-table?rq=1 – Alexan