删除SQL中的重复项

删除SQL中的重复项,sql,sql-server,duplicates,inner-join,having,Sql,Sql Server,Duplicates,Inner Join,Having,我需要选择所有尚未开具发票的订单 BR.isInvoiced=0 选择DG.DateGenerated、oit.OrderIdentifier、BR.isInvoiced、BR.hash、, BR.OrderNumber,UL.FirstName,UL.LastName来自[Order]O 内部联接计费报告BR ON O.OrderNumber=BR.OrderNumber 内部连接用户SLIB UL 在UL.UserID=O.UserID上 内部联接顺序\u标识符\u事务OIT ON O.Or

我需要选择所有尚未开具发票的订单 BR.isInvoiced=0

选择DG.DateGenerated、oit.OrderIdentifier、BR.isInvoiced、BR.hash、, BR.OrderNumber,UL.FirstName,UL.LastName来自[Order]O 内部联接计费报告BR ON O.OrderNumber=BR.OrderNumber 内部连接用户SLIB UL 在UL.UserID=O.UserID上 内部联接顺序\u标识符\u事务OIT ON O.OrderNumber=OIT.OrderNumber 内连接 选择OP.OrderNumber,OP.DateGenerated from OrderProducts OP 按OP.OrderNumber、OP.DateGenerated分组 在中生成op.date选择MAXop.DateGenerated from orderproducts as DG 关于DG.OrderNumber=O.OrderNumber 其中O.状态=‘已完成’ BR.isInvoiced=0 UL.UserName与“%Support%”不同 和UL.AccountNumber!='10000001001' BR.invoicepdf为空 和BR.ispaid=0

然后仅选择根据ordernumber生成的最新日期 但使用此查询,我仍然发现一些重复项如下:

您是否尝试在第二个内部联接上使用UNIQUE


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

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 aggregate函数从中进行选择。最后,我为所有其他字段添加了GROUP BY子句。

您的MAX select中有一个别名

选择MAXop.DateGenerated from orderproducts

请尝试以下方法:

选择从orderproducts生成的MAXDateGenerated,其中ordernumber=op.ordernumber


生成查找最近日期时,缺少OP.OrderNumber=OP1.OrderNumber的位置。我希望它能对您有所帮助。

如果您仔细观察,您会发现为这两条突出显示的记录生成的日期不一样。因此,它们在技术上是不同的记录,而不是重复记录。是的。但我们正在寻找最近生成的日期。如照片所示,在尝试我们仍然出现的唯一代码副本时,副本也会出现。此代码现在可以工作,但我在括号的末尾添加了一个别名,BR.ispaid=0作为OA,代码可以工作。谢谢你们的帮助,谢谢大家
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
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