删除 SQL 中的重复项

Removing Duplicates in SQL

我需要select所有尚未开发票的订单 and BR.isInvoiced = 0

Select DG.DateGenerated, oit.OrderIdentifier, BR.isInvoiced, BR.hash, BR.OrderNumber, UL.FirstName, UL.LastName from [Order] O INNER JOIN BillingReport BR ON O.OrderNumber = BR.OrderNumber INNER JOIN UsersLib UL ON UL.UserID = O.UserId INNER JOIN Order_Identifier_Transactional OIT ON O.OrderNumber = OIT.OrderNumber INNER JOIN (Select OP.OrderNumber, OP.DateGenerated from OrderProducts OP group by OP.OrderNumber, op.DateGenerated having op.DateGenerated in (select MAX(op.DateGenerated) from orderproducts ))as DG ON DG.OrderNumber = O.OrderNumber where O.Status = 'COMPLETED' and BR.isInvoiced = 0 and UL.UserName not like '%Support%' and UL.AccountNumber != '10000001001' and BR.invoicepdf is NULL and BR.ispaid = 0

然后 select 只有每个订单号生成的最新日期 但是使用这个查询我仍然发现一些重复项:

你试过在第二个 INNER JOIN 上使用 UNIQUE 吗?

INNER JOIN
     (Select UNIQUE OP.OrderNumber, OP.DateGenerated
      from OrderProducts OP 
      group by OP.OrderNumber, op.DateGenerated
      having op.DateGenerated in
            (select MAX(op.DateGenerated)
             from orderproducts )) as DG
ON DG.OrderNumber = O.OrderNumber

这是解决问题的最快方法:

SELECT MAX(DateGenerated), OrderIdentifier, isInvoiced, hash, OrderNumber, 
    FirstName, LastName
FROM (Select DG.DateGenerated, oit.OrderIdentifier, BR.isInvoiced, BR.hash, 
    BR.OrderNumber, UL.FirstName, UL.LastName   from [Order] O
    INNER JOIN BillingReport BR
    ON O.OrderNumber = BR.OrderNumber
    INNER JOIN UsersLib UL
    ON UL.UserID = O.UserId
    INNER JOIN Order_Identifier_Transactional OIT
    ON O.OrderNumber = OIT.OrderNumber
    INNER JOIN
     (Select OP.OrderNumber, OP.DateGenerated from OrderProducts OP 
     group by OP.OrderNumber, op.DateGenerated
      having op.DateGenerated in (select MAX(op.DateGenerated) from orderproducts ))as DG
    ON DG.OrderNumber = O.OrderNumber
    where O.Status = 'COMPLETED' 
    and BR.isInvoiced = 0
    and UL.UserName not like '%Support%' 
    and UL.AccountNumber != '10000001001' 
    and BR.invoicepdf is NULL 
    and BR.ispaid = 0)
GROUP BY OrderIdentifier, isInvoiced, hash, OrderNumber, FirstName, LastName

我获取了您的整个查询,将其用引号引起来,然后使用围绕 DateGenerated 的 MAX 聚合函数从中进行选择。最后,我为所有其他字段添加了 GROUP BY 子句。

您的 MAX 中有别名 select

(select MAX(op.DateGenerated) from orderproducts )

试试这个:

(select MAX(DateGenerated) from orderproducts where ordernumber = op.ordernumber )

Select DG.DateGenerated, oit.OrderIdentifier, BR.isInvoiced, BR.hash, 
    BR.OrderNumber, UL.FirstName, UL.LastName   from [Order] O
    INNER JOIN BillingReport BR
    ON O.OrderNumber = BR.OrderNumber
    INNER JOIN UsersLib UL
    ON UL.UserID = O.UserId
    INNER JOIN Order_Identifier_Transactional OIT
    ON O.OrderNumber = OIT.OrderNumber
    INNER JOIN
     (Select OP.OrderNumber, OP.DateGenerated from OrderProducts OP 
     group by OP.OrderNumber, op.DateGenerated
      having op.DateGenerated in (select MAX(op.DateGenerated) from orderproducts OP1 WHERE OP.OrderNumber =  OP1.OrderNumber))as DG
    ON DG.OrderNumber = O.OrderNumber
    where O.Status = 'COMPLETED' 
    and BR.isInvoiced = 0
    and UL.UserName not like '%Support%' 
    and UL.AccountNumber != '10000001001' 
    and BR.invoicepdf is NULL 
    and BR.ispaid = 0

找到最近生成的日期时,您缺少 WHERE OP.OrderNumber = OP1.OrderNumber。希望对你有所帮助。