DB2: Получить последний заказ для каждого клиента в данной таблице?
У меня есть таблицы клиентов и заказов в DB2, я хочу запрос на выборку, чтобы получить последние данные заказа для каждого клиента в таблице.
таким образом, запрос вернет всех клиентов в таблице Customer и информацию о последнем заказе (скажем, order_id), размещенном клиентом (у клиента может быть много заказов). Есть какие-нибудь идеи по поводу того, как это сделать?
В таблице "Заказ" есть столбец с отметкой времени, когда было размещен заказ.
Что-то вроде этого:
SELECT customer.name, order.order_id
FROM customer, order
WHERE customer.customer_id=order.customer_id
AND order.ordertime is newest
Большое спасибо.
ОБНОВЛЕНИЕ: просто чтобы прояснить мой вопрос, я бы хотел, чтобы для каждого клиента возвращалась отдельная строка с информацией о последнем заказе (отдельном заказе) для этого клиента.
4 ответа
Первая группа по клиенту и выберите максимальную дату заказа:
select customer_id, max(ordertime)
from order
group by customer_id
Вы не можете получить все остальные поля с помощью запроса так просто. Теперь вам нужно снова присоединить эти результаты к таблице заказов, чтобы получить то, что вы хотите.
select c.name, o.*
from customer c join
order o on c.customer_id = o.customer_id join
(
select customer_id, max(ordertime) ordertime
from order
group by customer_id
) RecentOrders on o.customer_id = RecentOrders.customer_id and
o.ordertime = RecentOrders.ordertime
Попробуй это:
SELECT Customer1.Name, Order1.order_id
FROM Customer Customer1, Order Order1
WHERE Customer1.customer_id = Order1.customer_id
AND Order1.LASTUPDATETIME = (
SELECT MAX(Order2.LASTUPDATETIME)
FROM Order Order2
WHERE Order2.customer_id=Order1.customer_id
)
Попробуй это. Это работает в MySQL, не уверен насчет синтаксических различий между MySQL и DB2:(
select c.name, s.* from (
select o1.customer_id, o1.order_id from order o1
left join order o2
on o1.customer_id = o2.customer_id and o1.ordertime < o2.ordertime
where o2.customer_id is null
) as S
join customers c on c.customer_id = s.customer_id
Может быть решен с помощью соединения. Customer_id является первичным ключом в таблице клиентов и используется в таблице заказов для распознавания клиента, который размещает заказ. Дата - это столбец, в котором указана дата размещения заказа (если бы вы могли предоставить структуру таблицы, я мог бы написать правильный запрос для вашей структуры).
SELECT customer_id,order_id
FROM (
Select o.customer_id,o.order_id,max(o.order_date)
FROM Customer c
inner join Orders o
ON o.customer_id=c.customer_id
GROUP BY o.customer_id,o.order_id
)