我正在尝试构建一个oracle sql查询,以根据有序值生成唯一的行。我认为展示一个例子是最简单的:
我们说我的桌子看起来像这样:
Table 1
id A B
--------------
0 a_0 b_0
1 a_1 b_0
2 a_2 b_1
3 a_3 b_1
4 a_4 b_2
5 a_5 b_2
6 a_6 b_2
...
我想返回一个包含唯一 B值的表,这样A值就是最大值。
表格结果
id A B
--------------
0 a_0 b_0
1 a_3 b_1
2 a_5 b_2
...
其中a_0 > a_1
,a_3 > a_2
,a_5 > a_4 and a_5 > a_6
,...
这是否可以在单个查询中完成(子查询,plsql等等......很好)。
我能够轻而易举地解决这个问题,但我不知道如何在sql中做到这一点。
答案 0 :(得分:0)
一种方法使用相关子查询:
(a, b)
使用select max(id) keep (dense_rank first order by a desc) as id, max(a) as a, b
from table1 t
group by b;
上的索引,这可能是最快的方法。
另一种有趣的方法是聚合:
peer channel create
实际上,Oracle在聚合性能方面非常出色,所以这也可以很好地运行。
您也可以查看SQLFiddle。