sql - Oracle - 分组依据为 "steps"

标签 sql oracle

我必须下表:

|MY_VALUES|
|---------|
| 1       | 1' iteration
| 3       | 1' iteration   | 2' iteration
| 2       | 1' iteration   | 2' iteration   | 3' iteration
| 5       | 1' iteration   | 2' iteration   | 3' iteration
| 3       | 1' iteration   | 2' iteration   | 3' iteration
| 2       |                | 2' iteration   | 3' iteration
| 4       |                                 | 3' iteration

我需要一个输出如下的查询:

MY_RESULTS
----------
14
15
16

查询基本上是对第一个结果的前 5 行求和,然后它向前移动一个值,并对其他 5 行求和,依此类推...

有没有办法用 Oracle 做到这一点?我在文档中找不到进行此类工作的任何内容。

最佳答案

SQL 表表示无序 集。没有 5 个相邻行这样的东西,除非您有一列指定顺序。

然后您可以使用窗口函数执行此操作,假设您有这样一个列:

select t.*, sum(my_values) over (order by id rows between 4 preceding and current row) as sum5
from t;

这对所有行都适用。如果您想删除前 4 个(并且“id”并不容易),有多种方法:

select t.*
from (select t.*,
             sum(my_values) over (order by id rows between 4 preceding and current row) as sum5,
             row_number() over (order by id) as seqnum
      from t
     ) t
where seqnum >= 5;

关于sql - Oracle - 分组依据为 "steps",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44136948/

相关文章:

sql - 查询以将相同的 ID 分配给插入的行,如果它已存在于表中

linux - 在 Oracle 12c 中移动数据文件后操作系统存储不释放

sql - Oracle SQL : variables used in place of table names

sql - 从同一 Azure SQL Server 上的其他数据库调用主数据库的函数

java - 将数据输入数据库

java - SQL获取不在的行

regex - 如何从 PL/SQL 中的字符串中删除所有非字母字符?

sql - 验证两个不同表的两列完全匹配

php - 我想在发布后获得一个 id(自动增量)并将其发布到其他表中

oracle - Golden Gate 复制极度延迟