SQL 服务器:使用其他列的最大值汇总结果

SQL Server: summarize results using max of other column

我正在努力解决这个问题。我在 table 中有以下数据(实际上要减少到更多的列):

问题是如何得到结果?

规则是我只希望每个子产品只包含一行 Max(changed)

你能帮帮我吗?

我试过Group by Product, subproduct但是很惨地失败了

求助!

SELECT * FROM
(
  SELECT *, ROW_NUMBER() OVER(PARTITION BY Product, SubProduct ORDER BY Changed DESC) rn FROM table
)
WHERE rn = 1

ROW_NUMBER() OVER(PARTITION BY Product, SubProduct ORDER BY Changed DESC) 按已更改的降序对行进行编号。每次Product+SubProduct组合发生变化,编号从1

重新开始

然后我们有一个外部查询选择所有编号为 1

的行

之所以可行,是因为它不是真正的群组。分区有点像一个组,但我们不会使用这种技术丢失任何行——输入中的所有行都会在添加额外数据的情况下进入输出。相反,一组丢失数据;如果您按产品和子产品分组,则不能在不将它们添加到分组键的情况下添加更多列,这会破坏您尝试创建的组。在分组查询中你唯一可以对列做的另一件事是 运行 一个聚合函数,但你不能说 "get me the max Changed and i want the associated price" 你只能要求 max Changed 和 max price (或其他)并且它们不一定来自同一行

考虑以下因素(将 Table1 更改为您的 table 姓名):

select a.*
from Table1 a inner join
(
    select b.product, b.subproduct, max(b.changed) as mc
    from Table1 b
    group by b.product, b.subproduct
) c on 
a.product = c.product and 
a.subproduct = c.subproduct and 
a.changed = c.mc

子查询选择 ProductSubproduct 具有最新的 Changed 值,最外层查询将原始 table 与子查询选择的记录连接起来。