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
子查询选择 Product
和 Subproduct
具有最新的 Changed
值,最外层查询将原始 table 与子查询选择的记录连接起来。
我正在努力解决这个问题。我在 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
子查询选择 Product
和 Subproduct
具有最新的 Changed
值,最外层查询将原始 table 与子查询选择的记录连接起来。