Извините за название. Это было лучшее, что я мог придумать.
В любом случае, вот мой вопрос - у меня есть 2 таблицы, таблица клиентов и таблица заказов, как показано ниже:
Customer {
Long id;
String name;
String address;
Timestamp createdOn;
}
Order {
Long id;
String productName;
Long customerId;
Timestamp createdOn;
}
Существует отношение один-ко-многим от Клиента к Заказу, то есть у Клиента может быть много Заказов, как указано в customerId.
Теперь вот мой вопрос. Я хочу получить список всех клиентов вместе с их последними заказами. Исходя из приведенной выше таблицы, это то, что я смог придумать до сих пор:
SELECT *
FROM CUSTOMER AS CUSTOMERS
INNER JOIN (
SELECT *
FROM ORDER AS BASE_ORDERS
INNER JOIN (
SELECT MAX_ORDERS.CUSTOMERID,
MAX(MAX_ORDERS.CREATEDON)
FROM ORDER AS MAX_ORDERS
GROUP BY CUSTOMERID
) AS GROUPED_ORDERS
ON BASE_ORDERS.CUSTOMERID = GROUPED_ORDERS.CUSTOMERID
AND BASE_ORDERS.CREATEDON = GROUPED_ORDERS.CREATEDON
) AS LATEST_ORDERS
ON CUSTOMERS.ID = LATEST_ORDERS.CUSTOMERID
Есть ли лучший способ сделать это? Единственный другой способ, о котором я могу подумать, - это добавить новое поле с именем «isLatest» и установить его значение «истина» каждый раз, когда для клиента создается новый заказ.
Дайте мне знать, что вы думаете.