tsql - 从两个表中为每个客户选择第一个订单
问题描述
大家好,我有两张表 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。
我需要为每个客户
穆拉特
解决方案
您可以使用ROW_NUMBER()
窗口函数来获取每个客户最早的信息product_id
,然后加入Menu
表格以获取您的产品详细信息。
编辑:更新ORDER
为ASC
.
;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
推荐阅读
- javascript - 当一段时间后没有新的控制台日志比重新加载
- openlayers-6 - 如何访问光栅源的所有像素
- c# - c# CefSharp“不支持密钥“target-densitydpi”。”,来源
- java - 可能重复:尝试在空对象引用上调用虚拟方法 'void android.widget.TextView.setText(java.lang.CharSequence)'
- python - 打开新窗口后如何销毁窗口?
- python-3.x - 从 AWS 自托管的 MongoDB 更改为 Atlas 导致 pymongo.errors.ServerSelectionTimeoutError:
- python - 从 Mitsuba2 (Python) 获取场景的光谱辐射度
- policy - 从开放策略代理 (OPA) 查询中传回一个值
- twitter - Twitter:检索历史数据样本
- c# - UWP:如何在单独的监视器中检索第二个窗口的大小和比例因子