Чтобы найти последний отчет для каждого здания, это хитрость здесь.Во-первых, вам нужно найти дату последнего отчета, например:
SELECT MAX(RepDate) RepDate, Building
FROM reports
GROUP BY RepDate
GROUP BY гарантирует, что у вас будет только одна строка на здание.
Затем вам нужно обработатьэтот запрос в виде виртуальной таблицы и присоединиться к нему.(http://sqlfiddle.com/#!9/ade437e/2/0)
SELECT o.OrderID, o.OrderDate, o.Client, o.Country,
r.RepId, r.RepDate, r.Building
FROM orders o
LEFT JOIN reports r ON o.OrderID = r.OrderID
LEFT JOIN ( SELECT MAX(RepDate) RepDate, Building
FROM reports
GROUP BY RepDate
) m ON r.RepDate = m.RepDate AND r.Building = m.Building
Обратите внимание на использование здесь LEFT JOIN
. Это означает, что заказы без соответствующего отчета все равно будут отображаться в наборе результатов. Если вы не хотите эти заказы, измените LEFT JOIN
to JOIN
.
Если вы хотите отфильтровать этот результирующий набор, добавьте WHERE o.Country = 'US'
(или фильтр по вашему выбору) в конец запроса. Затем вы можете использовать ORDER BY
для сортировки результатаустановите, если это то, что вам нужно.
Хитрость заключается в том, чтобы построить запрос изнутри.
Кстати, это называется наибольшее n на группу шаблон.