[2 [2
通常,数据库查询需要在列中找到最大值,并从同一行中的其他列中检索相应的数据。 对于非常大的数据集,这尤其具有挑战性。 考虑需要一张需要找到每个唯一ID的最高版本编号以及其关联的标签:
id | 标签| 版本 ------ ------------------------- 1 | A | 10 2 | A | 20 3 | b | 99 4 | C | 30 5 | f | 40 [2
id | 标签| 版本 ------ ------------------------- 2 | A | 20 3 | b | 99 4 | C | 30 5 | f | 40
对于具有约2800万行的表,嵌套等标准方法shite max
可以非常慢。 一个更有效的解决方案使用ID | tag | version
----- ----- -----
1 | A | 10
2 | A | 20
3 | B | 99
4 | C | 30
5 | F | 40
此查询有两个步骤:
ID | tag | version
----- ----- -----
2 | A | 20
3 | B | 99
4 | C | 30
5 | F | 40
partition(具有相同ID的行组)中的每一行分配唯一的等级(。排名基于降序的列,这意味着最高版本获得等级1。
外部查询:它从内部查询中过滤结果,仅选择行
。 这有效地为我们提供了每个的最大值
。
SELECT s.id, s.tag, s.version
FROM (
SELECT t.*,
ROW_NUMBER() OVER(PARTITION BY t.id ORDER BY t.version DESC) AS rnk
FROM YourTable t
) s
WHERE s.rnk = 1;
row_number()的使用提供了一种干净有效的方法来实现所需的结果。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3