在SQL Server 2014中查询报表(我需要表的最后一行)

在SQL Server 2014中查询报表(我需要表的最后一行),sql,sql-server,sql-server-2014,Sql,Sql Server,Sql Server 2014,我使用的是SQL Server 2014,我的查询有问题 我希望在我的报告中包含订单中ID\u order=9已交付的所有项目。对于已经两次交付的项目(例如,项目代码=Art3),我只想得到最后一行,这意味着这个项目的最后一次交付,没有重复 我已经尝试了这两个查询,但没有成功: 尝试#1:不同 SELECT DISTINCT Order.ItemCode, Delivery. Qty, Delivery.ID_Delivery, Order.ID_Order FROM

我使用的是SQL Server 2014,我的查询有问题

我希望在我的报告中包含订单中
ID\u order=9
已交付的所有项目。对于已经两次交付的项目(例如,项目代码=Art3),我只想得到最后一行,这意味着这个项目的最后一次交付,没有重复

我已经尝试了这两个查询,但没有成功:

尝试#1:不同

SELECT DISTINCT 
    Order.ItemCode, Delivery. Qty, Delivery.ID_Delivery, 
    Order.ID_Order
FROM 
    Delivery
INNER JOIN
    Order ON Order.ID_Order = Delivery.ID_Order 
WHERE
    Order.ID_Order = '9'
尝试#2:子查询

SELECT * 
FROM
    (SELECT
         Order.ItemCode, Delivery.Qty, 
     FROM
         Delivery 
     INNER JOIN
         Order ON Order.ID_Order = Delivery.ID_Order
     WHERE
         Order.ID_Order = '9')
GROUP BY 
    a.ItemCode, a.Qty
请尝试此查询--


我希望它能对您起作用。

我无法理解的是,您为什么要放弃
ar2
id\u delivery=23
。条件是什么。您的要求是什么?选择上次交货的标准是什么?根据什么可以判断最后一次交货?或者如果您只是想要得到想要的结果,那么只需在
id\u订单、itemcode
上进行分组,然后选择max(id\u交货)、max(数量)和其他列
;WITH CTE
AS (
    SELECT C.ID_Order
        ,D.ID_Delivery
        ,C.ItemCode
        ,C.Quantity
        ,ROW_NUMBER() OVER (
            PARTITION BY C.ItemCode ORDER BY D.ID_Delivery DESC
            ) AS RowNum
    FROM Customer_Order C
    INNER JOIN Delivery D ON C.ID_Order = D.ID_Order
        AND C.ItemCode = D.ItemCode
    WHERE C.ID_Order = 9
    )
SELECT ID_Order
    ,ID_Delivery
    ,ItemCode
    ,Quantity
FROM CTE
WHERE RowNum = 1
SELECT
    Order.ItemCode, Delivery. Qty, Delivery.ID_Delivery, 
    Order.ID_Order
FROM 
    Delivery
INNER JOIN
    Order ON Order.ID_Order = Delivery.ID_Order 
WHERE
    Order.ID_Order = '9'
AND Delivery.ID_Delivery IN 
(
 SELECT MAX(ID_Delivery) FROM Delivery D WHERE D.ID_Order = Delivery.ID_Order GROUP BY D.ID_Order
)