SQL 最大值但也显示其他列的值

SQL Max Value But Also Displaying Values From Other Columns

我从几个不同的 table 中提取数据以提供以下示例数据。为简单起见,示例数据仅显示一个 OrderID。我需要做的是获取 OrderID 的最高价格行,但我还需要查看与该特定行关联的其他 ID,如下面的期望结果 table 所示。有什么办法可以实现吗?

我正在 SQL 中创建此数据的视图,如果可能的话,我想在一个视图中完成所有操作。

当前代码

SELECT        Items.OrderID, Items.ItemID, Items.Code, Price.Price
FROM            Items LEFT OUTER JOIN
                         Codes ON Items.Code = Codes.Code LEFT OUTER JOIN
                         ItemCategories ON Codes.CategoryID = ItemCategories.CategoryID LEFT OUTER JOIN
                         Price ON Codes.CodeGrouping = Price.CodeGrouping
WHERE        (YEAR(Items.Date) = YEAR(GETDATE()) OR
                         YEAR(Items.Date) = YEAR(GETDATE()) - 1) AND (ItemCategories.CategoryID = 1) AND (Items.OrderID_Status = 3)

示例数据

OrderID     ItemID     Code     Price
--------------------------------------
454646      429264     12121    833
454646      429677     6116     1
454646      431168     194      719
454646      431248     6078     1
454646      432023     455      1030

想要的结果

OrderID     ItemID     Code     Max_Price
-----------------------------------------------------
454646      432023     455      1030

提前致谢!

我会推荐 row_number(),因为它很容易集成到现有查询中:

select *
from (
    select 
        t.*, 
        row_number() over(partition by orderid order by price desc) rn
    from mytable t
) t
where rn = 1

在您的原始查询中:

SELECT *
FROM (
    SELECT        
        i.OrderID, 
        i.ItemID, 
        i.Code, 
        p.Price,
        ROW_NUMBER() OVER(PARTITION BY i.OrderID ORDER BY p.Price DESC) rn
    FROM Items i
    LEFT JOIN Codes c           ON i.Code = c.Code 
    LEFT JOIN ItemCategories ic ON c.CategoryID = ic.CategoryID 
    LEFT JOIN Price p           ON c.CodeGrouping = p.CodeGrouping
    WHERE
        i.Date >= DATEFROMPARTS(YEAR(GETDATE()) - 1, 1, 1)
        AND i.Date < DATEFROMPARTS(YEAR(GETDATE()) + 1, 1, 1)
        AND ic.CategoryID IN (1, 3)
) t
WHERE rn = 1

请注意,我稍微更改了查询:

  • 可以优化日期过滤 - 不要在日期列上应用日期函数(它会排除列上的现有索引)

  • table 别名使查询更易于编写和阅读