删除 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
。希望对你有所帮助。
我需要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
。希望对你有所帮助。