sql-server - SQL 按最高日期返回行
问题描述
我在按产品数量的最大日期获取行时遇到问题
这是产品表
SupplierCode Reference Qty
1000 M131200 500
1111 M131200 1
1000 M131300 200
1111 M131300 500
这是订单表
SupplierCode Reference OrderDate
1000 M131200 2019-01-09 00:00:00.000
1111 M131200 2018-07-25 00:00:00.000
1000 M131200 2019-01-15 00:00:00.000
1000 M131200 2019-01-21 00:00:00.000
1111 M131200 2019-01-02 00:00:00.000
1111 M131300 2019-02-05 00:00:00.000
1000 M131300 2019-03-05 00:00:00.000
1000 M131300 2019-04-07 00:00:00.000
1111 M131300 2019-02-04 00:00:00.000
我只需要返回每个参考的产品数量,以便我可以加入另一个表。问题是有不止一个供应商,所以引用会在我的最终查询中产生重复的结果,因为一个引用可以有多个供应商。
我设法获得了每个供应商的最新日期
SELECT
O.SupplierCode,
O.Reference,
MAX(OrderDate) AS Date
FROM
Orders O
GROUP BY
O.SupplierCode,
O.Reference
返回这个
SupplierCode Reference Date
1000 M131200 2019-01-21 00:00:00.000
1111 M131200 2019-01-02 00:00:00.000
1000 M131300 2019-04-07 00:00:00.000
1111 M131300 2019-02-05 00:00:00.000
所以现在我需要为每个参考选择最新日期的供应商
例如,我正在寻找的最终输出是这样的,当然加入两个表会更快:
SupplierCode Reference Qty Date
1000 M131200 500 2019-01-21 00:00:00.000
1000 M131300 200 2019-04-07 00:00:00.000
但我不确定我应该如何对where
条款进行日期验证
解决方案
您可以使用 ROW_NUMBER() 为每个参考选择最新的供应商:
with maxOrder as
(
select
*
, ROW_NUMBER() OVER (PARTITION BY Reference ORDER BY OrderDate DESC) as number
from Orders
)
Select
o.SupplierCode
,o.Reference
,p.Qty
,o.OrderDate
from maxOrder as o
join Products as p
on p.SupplierCode = o.SupplierCode
and p.Reference = o.Reference
where o.number = 1
推荐阅读
- python - 由 matplotlib 中的点确定的轮廓边缘
- java - Android 相对布局按钮使应用程序崩溃
- java - Netty systemd 延迟初始化
- java - maven 依赖:purge-local-repository 导致依赖解析错误
- c++ - 方括号运算符[]的输入输出方法
- javascript - 请求的资源上不存在“Access-Control-Allow-Origin”标头 - 角度 5
- jenkins - 使用来自 SCM 的 Jenkinsfile 进行 Jenkins 参数化构建
- javascript - 如何关闭使用 document.createElement 创建的 HTML 标签?
- pester - 如何使用 Pester 模拟模块不可用的 cmdlet?
- wordpress - 购买相关变体时,Woocommerce 以编程方式减少库存