首页 > 解决方案 > 从两个表中为每个客户选择第一个订单

问题描述

大家好,我有两张表 dbo.Sales(customer_id、order_date、product_id)和 dbo.Menu(Product_id、product_name、price)。问题是每位顾客购买的菜单中的第一项是什么?

我的解决方案是

    select A.customer_id,m.product_id, m.product_name
    from dbo.menu  m
    cross apply
    (select top 1 * from dbo.sales s
    where s.product_id=m.product_id
    group by s.customer_id,s.order_date, s.product_id
    order by s.order_date) A

customer_id product_id product_name A 1 寿司 A 2 咖喱 C 3 拉面

缺少的客户是 B。它给了我 A 的第二个第一个订单,而不是 B。

我需要为每个客户

穆拉特

标签: tsql

解决方案


您可以使用ROW_NUMBER()窗口函数来获取每个客户最早的信息product_id,然后加入Menu表格以获取您的产品详细信息。

编辑:更新ORDERASC.

;with cte
as (
select customer_id, product_id, row_number() over (partition by customer_id order by order_date acs) RN
from dbo.Sales)
select c.customer_id, c.product_id, m.product_name
from cte c
join dbo.menu m on c.product_id=m.product_id
where RN = 1

推荐阅读