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



>我有两个表 - 客户和订单。 每个客户将有 1..n 个订单。 它们在外键上与"订单"表中的"客户"表有关系。 到目前为止,DB 101 也是如此。

我需要一个查询,该

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

在自动递增 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

你没有说明你的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

相关内容

最新更新