sql - SQL选择省略倍数
问题描述
我有两 (2) 个表 - 帐户和订单。Order 列的每一行都包含一个 Account ID,它将其链接到 Account 表中的特定 Account。每个账户可以有任意数量(零-n)个订单。我已经在 Account ID 上将两者 LEFT OUTER JOINED,所以表格如下所示:
|Account ID|Account Data|Order A/C ID|Order ID|Order Date|
----------------------------------------------------------
|A001 |Blah blah |A001 |O001 |Some date |
|A001 |Blah blah |A001 |O002 |Some date |
|A002 |Blah blah |A002 |O003 |Some date |
|A003 |Blah blah |Null | | |
|A004 |Blah blah |A004 |O005 |Some date |
|A004 |Blah blah |A004 |O006 |Some date |
|A005 |Blah blah |A005 |O007 |Some date |
|A005 |Blah blah |A005 |O008 |Some date |
|A005 |Blah blah |A005 |O009 |Some date |
但是我想让表格只显示每个帐户的一行,按订单的某些字段(例如,对于一个帐户的每个订单,通过订单日期字段选择最近的一个并只显示那个)。
该表还必须显示没有账户订单的行。
当然,这个想法是获取一个表格,显示每个帐户的最新订单,或者,如果该帐户没有订单,则在订单字段中为空。
哦,值得一提的是,SQL Server 17.8。
解决方案
您可以使用排名功能对帐户的订单进行排名,然后选择第一排名订单,如下所示 -
Select * from
(
Select
A.AccountId,
A.AccountData,
o.OrderAcctId,
o.OrderId,
o.OrderDate,
Rank() Over (Partition by A.AccountId order by O.OrderDate) as Rnk
From Account
Left Join Order O on A.AccountId = o.OrderAcctId
) Query
Where Rnk = 1
推荐阅读
- visual-studio-code - 用于模块化 vscode 设置的多个文件
- javascript - 多个不同的文件上传 - ForEach 获取并重用响应
- javascript - React:将索引传递给孩子并让数组使用这个索引
- javascript - 带有 xAxis 日期时间的样条图,该线从 yAxis 上的极左/原点重叠色带开始
- c - 我的程序有 AddressSanitizer 错误,但我不知道如何阅读
- javascript - 警告:ant Checkbox: value is not a valid prop,你的意思是检查了吗?
- reactjs - 如何通过反应在块中制作自定义编程语言
- r - 更改环 visNetwork 图的布局
- c++ - 为什么我不能使用函数来查找数组的长度?
- python - 为什么我的标题通知是 python 即使我设置了我想要的方式?