![](/img/trans.png)
[英]SQL Server - Select Rows, Remove Duplicates But Keep row with highest date
[英]SQL Server query to select the highest quantity data row
我一直试图找到类似的案例。 我找到了很多东西,但我仍然无法弄清楚采用我的查询。
我在SQL Server中有一个有3个表的testDB,如下图所示:
我创建了如下查询:
SELECT P.FirstName,
P.LastName,
O.ProductType,
PO.ProductName,
PO.Quantity
FROM Persons AS P
INNER JOIN Orders AS O ON P.PersonID = O.PersonID
INNER JOIN ProductOrders AS PO ON PO.OrderID = O.OrderID;
当前结果,它显示了ProductOrders的所有记录。 见下图:
我想要的结果只显示每个人名只有最高数量的记录。 我的预期结果如下图所示:
非常感谢您的帮助。
SQL Server有TOP WITH TIES
/ ROW_NUMBER()
技巧,非常优雅:
SELECT TOP (1) WITH TIES P.FirstName, P.LastName, O.ProductType, PO.ProductName, PO.Quantity
FROM Persons P INNER JOIN
Orders O
ON P.PersonID = O.PersonID INNER JOIN
ProductOrders PO
ON PO.OrderID = O.OrderID
ORDER BY ROW_NUMBER() OVER (PARTITION BY P.PersonId, P.ProductType ORDER BY PO.Quantity DESC);
使用窗口功能:
SELECT distinct P.FirstName
, P.LastName
, O.ProductType
, first_value(O.ProductName) OVER (Partition By P.FirstName, P.LastName, O.ProductType Order by PO.Quantity desc) as [Productname]
, max(PO.Quantity) OVER (Partition By P.FirstName, P.LastName, O.ProductType) as [Quantity]
FROM Persons AS P
INNER JOIN Orders AS O ON P.PersonID = O.PersonID
INNER JOIN ProductOrders AS PO ON PO.OrderID = O.OrderID;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.