SQL-获取结果集中每个属性的最大值
我有一个场景,其中包含以下查询:SQL-获取结果集中每个属性的最大值,sql,sql-server,Sql,Sql Server,我有一个场景,其中包含以下查询: SELECT Purchasing.Supplier, PurchasingParts.Part, PurchasingParts.Description, PurchasingParts.CostPerUnit, PurchasingParts.PurchaseOrderNum, PurchasingParts.ItemNum FROM PurchasingParts INNER JOIN Purchasing ON PurchasingParts.Purch
SELECT
Purchasing.Supplier,
PurchasingParts.Part,
PurchasingParts.Description,
PurchasingParts.CostPerUnit,
PurchasingParts.PurchaseOrderNum,
PurchasingParts.ItemNum
FROM PurchasingParts
INNER JOIN Purchasing ON PurchasingParts.PurchaseOrderNum = Purchasing.PurchaseOrderNum
WHERE Supplier = 'Sup1'
ORDER BY PurchasingParts.PurchaseOrderNum DESC
返回以下结果:
Supplier Part Description CostPerUnit PurchaseOrderNum ItemNum
Sup1 cm-14b NULL 9.99 37163 1
Sup1 cm-13 jkljlkjlk 9.99 37160 1
Sup1 cm-13 jkljlkjlk NULL 37158 1
但是,我希望过滤这组结果,以便只显示每个零件的最新订单(即具有最高PurchaseOrderNum的订单)(仅作用于零件属性)。因此,在这种情况下,最终结果将是:
Supplier Part Description CostPerUnit PurchaseOrderNum ItemNum
Sup1 cm-14b NULL 9.99 37163 1
Sup1 cm-13 jkljlkjlk 9.99 37160 1
我正在使用SQL Server 2008。您可以使用
行编号()
在PurchasingParts
表中,是否有id列或订单日期?PurchasingParts表的id是PurchaseOrderNum和ItemNumWhat about date of order的复合键?您有该字段吗?没有,因为采购订单号越高(自动递增),订单日期就越近。如果订单号随每条记录自动递增(SQL server递增,对吗?),那么ItemNum
的含义是什么?也就是说,我们可以为同一订单提供多个ItemNum
s吗?ItemNum
只是部分的id吗?
只有在我取出ORDER BY行时才有效:“ORDER BY子句在视图、内联函数、派生表、子查询和公共表表达式中无效,除非还指定了TOP、OFFSET或for XML。”我使用的是SQL Server 2014
SELECT t.* FROM (
SELECT
Purchasing.Supplier,
PurchasingParts.Part,
PurchasingParts.Description,
PurchasingParts.CostPerUnit,
PurchasingParts.PurchaseOrderNum,
PurchasingParts.ItemNum,
ROW_NUMBER() OVER(PARTITION BY PurchasingParts.Part ORDER BY PurchasingParts.PurchaseOrderNum DESC) as rnk
FROM PurchasingParts
INNER JOIN Purchasing ON PurchasingParts.PurchaseOrderNum = Purchasing.PurchaseOrderNum
WHERE Supplier = 'Sup1'
) t
WHERE t.rnk = 1
ORDER BY t.PurchaseOrderNum DESC