如何为每个客户获得一行,包括SQL中订单的第一行

时间:2012-05-17 09:20:08

标签: sql-server

我有两个表 - 客户和订单。每位客户将有1个订单。它们与Orders表中Customers表的外键有关系。到目前为止,DB 101。

我需要一个查询,它将为每个客户返回一行,以及该客户最新订单的日期和订单ID。所有客户至少有一个订单。我可以使用函数轻松完成此操作,但我更喜欢在SQL中执行此操作。

2 个答案:

答案 0 :(得分:3)

如果自动递增ID-s,并且没有日期差异,解决方案很简单:

SELECT c.*, o.*
FROM Customer c 
JOIN (SELECT max(id) as order_id, customer_id 
      FROM Order GROUP BY curtomer_id) conn on c.id = conn.customer_id
JOIN Order o on o.id = conn.order_id

答案 1 :(得分:1)

您没有说明您的DBMS,因此我假设符合ANSI标准的引擎。

select *
from (
    SELECT c.*, 
           o.*, 
           row_number() over (partition by o.customer_id order by order_date desc) as rn
    FROM Customer c 
      JOIN Order o on o.customer_id = c.id
)
where rn = 1