我在DB2中有Customer和Order表,我想要一个select查询来检索表中每个客户的最新订单详细信息。
所以查询将返回Customer表中的所有客户以及客户放置的最新订单的详细信息(比如说order_id)(客户可以有很多订单),关于最佳方式的任何想法?
订单表有一个时间戳列,其中包含下订单的时间。
这样的事情:
SELECT customer.name, order.order_id
FROM customer, order
WHERE customer.customer_id=order.customer_id
AND order.ordertime is newest
非常感谢。
更新:为了让我的问题更加清晰,我想为每个客户返回一行,其中包含该客户的最新订单(单笔订单)的详细信息。
答案 0 :(得分:2)
首先按客户分组并选择最大订单日期:
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
答案 1 :(得分:0)
可以使用join解决 Customer_id是customer表中的主键,在订单表中用于识别下订单的客户。 日期是具有订单所在日期的列 (如果你可以提供表结构,我可以为你的结构编写正确的查询)
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
)
答案 2 :(得分:0)
试试这个。这适用于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
答案 3 :(得分:0)
试试这个:
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
)