我有以下数据集
a b c `1` 2 3 3 6 9 9 2 11
正如你可以看到列a的第一个值是固定的(即1),但是从第二行开始,它会获取前一个记录的列c的值。
列b的值是随机的,列c的值计算为c = a + b
我需要编写一个sql查询,它将以上述格式选择此数据。我尝试使用滞后函数编写,但无法实现。
请帮忙。
修改:
列b
仅存在于表格中,a and c
需要根据b
的值进行计算。
Hanumant
答案 0 :(得分:5)
SQL> select a
2 , b
3 , c
4 from dual
5 model
6 dimension by (0 i)
7 measures (0 a, 0 b, 0 c)
8 rules iterate (5)
9 ( a[iteration_number] = nvl(c[iteration_number-1],1)
10 , b[iteration_number] = ceil(dbms_random.value(0,10))
11 , c[iteration_number] = a[iteration_number] + b[iteration_number]
12 )
13 order by i
14 /
A B C
---------- ---------- ----------
1 4 5
5 8 13
13 8 21
21 2 23
23 10 33
5 rows selected.
的问候,
罗布。
答案 1 :(得分:0)
在不知道行之间的关系的情况下,我们如何计算上一行a and b
列与当前行a column
的总和。我已在表格中再创建了两个column id and parent
找到两行之间的关系。
parent
是告诉我们previous row
的列,而id
是该行的primary key
。
create table test1 (a number ,b number ,c number ,id number ,parent number);
Insert into TEST1 (A, B, C, ID) Values (1, 2, 3, 1);
Insert into TEST1 (B, PARENT, ID) Values (6, 1, 2);
Insert into TEST1 (B, PARENT, ID) Values (4, 2, 3);
WITH recursive (a, b, c,rn) AS
(SELECT a,b,c,id rn
FROM test1
WHERE parent IS NULL
UNION ALL
SELECT (rec.a+ rec.b) a
,t1.b b
,(rec.a+ rec.b+t1.b) c
,t1.id rn
FROM recursive rec,test1 t1
WHERE t1.parent = rec.rn
)
SELECT a,b,c
FROM recursive;
WITH keyword
为要遵循的子查询定义名称recursive
WITH递归(a,b,c,rn)AS
接下来是命名子查询的第一部分
SELECT a,b,c,id rn
FROM test1
WHERE parent IS NULL
命名子查询是两个查询的UNION ALL
。这是第一个查询,它定义了递归的起始点。在我的CONNECT BY查询中,我想知道记录的开头是什么。
接下来是最令人困惑的部分:
SELECT (rec.a+ rec.b) a
,t1.b b
,(rec.a+ rec.b+t1.b) c
,t1.id rn
FROM recursive rec,test1 t1
WHERE t1.parent = rec.rn
这是它的工作原理:
WITH query:1。父查询执行:
SELECT a,b,c
FROM recursive;
SELECT a,b,c,id rn
FROM test1
WHERE parent IS NULL
在这种情况下,种子行将是id = 1,父级为null。让我们从这里开始将种子行称为“新结果”,在我们尚未完成处理的意义上是新的。
子查询联合中的第二个查询执行:
SELECT (rec.a+ rec.b) a
,t1.b b
,(rec.a+ rec.b+t1.b) c
,t1.id rn
FROM recursive rec,test1 t1
WHERE t1.parent = rec.rn