首页 > 解决方案 > 按供应商 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”开头的标准

标签: sqlsql-server

解决方案


使用 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;

推荐阅读