sql - 按供应商 ID 获取最新的 3 个订单
问题描述
我有以下 SQL Server 代码来从 4 个表的组合中获取信息。
我想将其修改为仅检索pmpOrderDate
供应商 ( ) 的最新 3 个订单 ( pmpSupplierOrganizationID
)。
SELECT
PO.pmpPurchaseOrderID, PO.pmpOrderDate, PO.pmpSupplierOrganizationID, O.cmoName
FROM
PurchaseOrders PO
INNER JOIN
PurchaseOrderLines POL ON PO.pmpPurchaseOrderID = POL.pmlPurchaseOrderID
INNER JOIN
Organizations O ON PO.pmpSupplierOrganizationID = O.cmoOrganizationID
INNER JOIN
Parts P ON POL.pmlPartID = P.impPartID
WHERE
P.impPartClassID LIKE 'PUMP%'
你能帮忙吗?
编辑:
我对我的实际要求并不完全清楚。为了进一步澄清,我最终需要的是根据 PurchaseOrderLines 中 PartID 的至少一个 PartClassID 按供应商 ID 显示最新的 3 个唯一采购订单,以具有以字符串“PUMP”开头的标准
解决方案
使用 ROW_NUMBER 进行分区pmpSupplierOrganizationID
和排序pmpOrderDate
。
with cteTopOrders AS (
SELECT PO.pmpPurchaseOrderID, PO.pmpOrderDate, PO.pmpSupplierOrganizationID, O.cmoName,
ROW_NUMBER() OVER(PARTITION BY pmpSupplierOrganizationID ORDER BY pmpOrderDate DESC) AS RowNum
FROM PurchaseOrders PO
Inner Join PurchaseOrderLines POL ON PO.pmpPurchaseOrderID = POL.pmlPurchaseOrderID
Inner Join Organizations O On PO.pmpSupplierOrganizationID = O.cmoOrganizationID
Inner Join Parts P ON POL.pmlPartID = P.impPartID
WHERE P.impPartClassID Like 'PUMP%'
)
SELECT pmpPurchaseOrderID, pmpOrderDate, pmpSupplierOrganizationID, cmoName
FROM cteTopOrders
WHERE RowNum <= 3;
推荐阅读
- openssl - 如何使用 Openssl 1.1.1 API 执行 Rehandshake 操作
- r - [For Loop] 在 R 中编织时出错:“闭包”类型的对象不可子集
- gdal - 使用 GeoPandas/Fiona 从 shapefile 读取 M 值
- c# - 加载程序集 AWSSDK.S3 时出错:“未配置 RegionEndpoint 或 ServiceURL”
- python - 如何处理由 groupBy&collect_list 创建的数组?
- python - 无法匹配 Keras LSTM 模型所需的维数
- flutter - 基于滚动值的 Flutter Web 视频播放
- php - 尝试从表中获取数据并插入我的数据库
- java - 通过 DAG 找到总路径成本等于或尽可能接近某个值的路径
- sql - 在 R 中使用 SQLsave 创建的表的列的数据类型是什么