sql - 从每个组中获取最大版本
问题描述
我需要获取 Oralce SQL 中每个版本的最大记录
Price Total_Amount Group Version
10 100 1 20190401.00
11 111 1 20190501.00 --- Print this version
5 50 2 20190401.00 --- Print this version
6 60 3 20190401.00
7 70 3 20190501.00
8 80 3 20190601.00
9 90 3 20190701.00 --- Print this version
上面的查询是从
select
sum(price),
sum(Total_amount),
group,
version,
row_number() over(Partition by group order by version) row_num,
dense_Rank over ( order by version) dense_Rank
from Table_name
group by group,version
我尝试在上面的查询中对组和密集等级使用分区,它给了我每个组中的最大值,但是当我尝试从上面查询结果时,它没有给我想要的结果
期望的输出
Price Total_Amount Group Version
11 111 1 20190501.00
5 50 2 20190401.00
9 90 3 20190701.00
解决方案
一种方法使用lead()
:
select t.*
from (select t.*,
lead(version) over (partition by group order by version) as next_version
from t
) t
group next_version is null;
在 Oracle 中,您还可以使用聚合来表达这一点,keep
语法如下:
select group, max(version),
max(price) keep (dense_rank first order by version desc) as price,
max(total_amount) keep (dense_rank first order by version desc) as total_amount
from t
group by group;
推荐阅读
- c - C中的运算符优先级(指针算术)
- hl7-fhir - Hapi Fhir DomainResource,您使用什么 URL?
- java - 通过 Eclipse 从 Java(FX) 创建 Windows EXE
- javascript - 对象数组。反应.js
- linkedin - 在 2019 年使用 LinkedIn API
- python-3.x - Python HTTP Client GET issue with port
- sql-server - 优化 SQL 查询 Select on Select Case
- java - 如何正确实现二进制搜索算法来猜测 Java 中的随机 BigInteger?
- python - Django ManyToManyField between 2 objects that point to one another
- c++ - 在 C++11 中具有对齐元素的 std::array 类型