如何使用当前行中的上一行值生成的上一个结果?
Posted
技术标签:
【中文标题】如何使用当前行中的上一行值生成的上一个结果?【英文标题】:How to use previous result that is made with previous row value in current row? 【发布时间】:2021-03-11 04:24:36 【问题描述】:我想问一下如何使用当前行中的上一行值生成的上一个结果。
例如,
我想在主查询中创建新列“NUM2”。
如图所示,第二行的 NUM2 由 3 * 2(第一行的 NUM2)组成
并且,第三行的 NUM1 是由 6 * 6(第二行的 NUM2,这个值是 3 * 2(第一行的 NUM2)的结果)
当我第一次遇到这个问题时,我想如果我可以使用变量,我可以解决这个问题。
但我不知道如何在 DML 情况下使用变量。
如果你能给我一些建议,我真的很感激。
(我使用的是 oracle 11g)
【问题讨论】:
您不能认真考虑在字符串列中使用诸如 'FIRST'、'SECOND' 等字符串值来order 行,你可以吗?除此之外 - 请创建一个稍长的输入(例如,四行);使用有意义的排序方法(例如,不要使用名为name
的字符串列,而是使用名为 seq
或 ord
的数字列),并显示您希望从该输入获得的输出。
您可以使用分析函数 LAG 来访问结果集中前几行中的数据 - 这对您有帮助吗?
@KoenLostrie 我刚刚编辑了这篇文章并添加了一张图片。那你能帮我回答一下这个问题吗?
@mathguy 我刚刚编辑了这篇文章并添加了一张图片。那你能帮我回答一下这个问题吗?
我会重复我的问题。您需要能够在order by
问题中使用排序列。什么排序允许您将FIRST
作为第一,SECOND
作为第二,THIRD
作为第三,FOURTH
作为第四,等等?这简直是疯了。你不能像其他人一样使用数字(1、2、3、4)吗?除此之外,这个问题并不难。 NUM2
列中的值 2 来自哪里?您是否将其作为绑定变量传入?
【参考方案1】:
您可以使用MODEL
子句:
WITH A ( name, num1 ) AS (
SELECT 'FIRST', 1 FROM DUAL UNION ALL
SELECT 'SECOND', 3 FROM DUAL UNION ALL
SELECT 'THIRD', 6 FROM DUAL UNION ALL
SELECT 'FOURTH', 10 FROM DUAL UNION ALL
SELECT 'FIFTH', 2 FROM DUAL
)
SELECT name, num1, num2
FROM a
MODEL
DIMENSION BY (ROWNUM AS rn)
MEASURES ( name, num1, 2 AS num2)
RULES (
num2[rn>1] = num1[cv(rn)] * num2[cv(rn)-1]
)
哪些输出:
姓名 |第 1 个 | NUM2 :----- | ---: | ---: 第一 | 1 | 2 第二 | 3 | 6 第三 | 6 | 36 第四 | 10 | 360 第五| 2 | 720
db小提琴here
【讨论】:
我刚刚编辑了这篇文章并添加了一张图片。那你能帮我回答这个问题吗?我认为你写的第二个答案是这个问题的正确答案。对吗?以上是关于如何使用当前行中的上一行值生成的上一个结果?的主要内容,如果未能解决你的问题,请参考以下文章
如果其他 UIView 带有隐藏选项,如何使下 UIView 固定到 UIScrollView 中的上 UIView?