【问题标题】:How to fill a new row in oracle with previous row values [duplicate]如何用以前的行值填充oracle中的新行[重复]
【发布时间】:2019-02-23 15:29:53
【问题描述】:

我有一个表 A 有以下值

year  quarter price source
2017   1       10    s
2017   3       12    t
2018   1       10    m
2018   2       15    r

我想看下表。是的,我想用上一季度的值填充未指定的季度。

我想创建一个包含所有季度的临时表 B,并与该表 A 进行连接,但是如何填写上一季度的价格和来源字段。

year  quarter price  source
2017   1       10      s
2017   2       10      s
2017   3       12      t
2017   4       12      t
2018   1       10      m
2018   2       15      r

【问题讨论】:

  • 您不需要临时表,使用简单的分层生成器创建缺失的行,左连接您的表,最后使用lag... ignore nulls 结合coalescenvl,如here
  • 我正在运行 10 万条记录,并且连接永远运行...

标签: sql oracle business-logic


【解决方案1】:

为此,oracle 具有 LAG 窗口功能,可让您访问以前的行。我认为,无论如何都不需要将数据填充到下一行,因为您可以在选择它时轻松收集它。

例如

SELECT year,
   quarter,
   price,
   source,
   price,
   LAG(price, 1, 0) OVER (ORDER BY year, quarter) AS price_previous FROM   A;

【讨论】:

    猜你喜欢
    • 2021-05-16
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 2018-04-15
    • 1970-01-01
    • 2019-11-09
    相关资源
    最近更新 更多