删除SQL中的重复项
我需要选择所有尚未开具发票的订单 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删除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
这是解决问题的最快方法:
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