我正在努力在查询中获得以下结果

这是我的桌子

Line_num Line_typ Cost
1000 6 0
2000 7 5000
3000 7 3000
4000 7 2000
5000 6 0
6000 9 3000
7000 7 2000
8000 1 2000

我想要的结果是

Line_num Line_typ Cost
1000 6 10000 (0+5000+3000+2000)
5000 6 5000 (0+3000+2000)
8000 1 2000

基本上只显示(6,1)中具有line_typ的行,但将中间所有其他行的列成本相加.

谢谢你的 idea 和帮助!!

伊凡

推荐答案

Tim Biegeleisen的答案很好,但需要一些中间产品和oracle功能,这一点可以在使用最少SQL时看出:

  • 在(1,6)中 Select line\u typ,按line\u num排序.
  • 用较大的line_num n对表进行第二次运行的成本求和,但是
  • 其中(第三次运行)在n之前的(1,6)中没有line_typ.

基本复杂度O(N³),指数略低.

因此:

select h.line_num, h.line_typ,
 (select sum(cost)
  from tbl g
  where g.line_num >= h.line_num
  and not exists (select *
                  from tbl
                  where line_num > h.line_num
                  and line_typ in (1, 6)
                  and line_num <= g.line_num)
 ) as cost
from tbl h
where h.line_typ in (1, 6)
order by h.line_num

(Given for non-oracle searchers.)

这里是一个链接到一个正在工作的demo.

Sql相关问答推荐

Oracle中的分层查询

LAG函数通过丢弃空值返回前一行

在Golang中管理数据库事务的简洁方法

我怎样才能得到列值对应的最大值在另一个?

PostgreSQL:按小时查看调整日期

有没有办法在Postgres中存储带有时区的时间戳,而不将其转换为UTC

两个不同星期的销售额,不加成一行

冲突查询的UPDATE时违反非空约束

在一个子查询中签入ID';S,如果未返回,则签入另一个子查询

如何从Spark SQL的JSON列中提取动态数量的键值对

动态组/转置

在SQL中将项分配给容器

如何在 SNOSQL 中执行反连接(或 where 子句过滤)以查找字段不包含另一个表中的值的行?

SQL 查找 varchar 类型列及其值中多次出现的子字符串

如何在第二个 INSERT 中使用第一个 INSERT 自动生成的 ID

SQL 多个不满足的条件失败

如何将 CONCATENATED 值与临时表中的值匹配

Select 多年的日期范围

过滤具有一对多关系的两个表之间的数据

SELECT 用于 Parent、Children 和 ORDER BY [Order] 列