Oracle Sql:基于最大列值的过滤器

时间:2018-04-19 21:55:31

标签: sql oracle

我正在尝试构建一个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_1a_3 > a_2a_5 > a_4 and a_5 > a_6,...

这是否可以在单个查询中完成(子查询,plsql等等......很好)。

我能够轻而易举地解决这个问题,但我不知道如何在sql中做到这一点。

1 个答案:

答案 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