Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql查询逻辑_Sql_Oracle_Logic_Lag_Analytical - Fatal编程技术网

sql查询逻辑

sql查询逻辑,sql,oracle,logic,lag,analytical,Sql,Oracle,Logic,Lag,Analytical,我有以下数据集 正如您所看到的,列a的第一个值是固定的(即1),但它从第二行拾取上一条记录的列c的值 b列的值是随机的,c列的值计算为c=a+b 我需要编写一个sql查询来选择上述格式的数据。我试着用滞后函数写,但没能实现 请帮忙 编辑: 列b仅存在于表中,a和c需要根据b的值进行计算 哈努马特 SQL> select a 2 , b 3 , c 4 from dual 5 model 6 dimension by (0

我有以下数据集

正如您所看到的,列a的第一个值是固定的(即1),但它从第二行拾取上一条记录的列c的值

b列的值是随机的,c列的值计算为c=a+b

我需要编写一个sql查询来选择上述格式的数据。我试着用滞后函数写,但没能实现

请帮忙

编辑:
b
仅存在于表中,
a和c
需要根据
b
的值进行计算

哈努马特

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.
问候,
罗布

问候,

Rob.

在不知道行之间的关系的情况下,我们如何计算前一行
a和b
列与当前行
a列
的总和。我在表中又创建了两个
列id和父列
,以查找两行之间的关系

parent
是告诉我们上一行的
的列,而
id
是该行的
主键

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;

  • 带有关键字的
    定义了子查询的名称
    recursive

    递归(a,b,c,rn)为

  • 接下来是命名子查询的第一部分

    选择a、b、c、id
    从测试1开始
    其中父项为空

  • 命名子查询是两个查询的联合。这是第一个查询,定义了递归的起点。在我的connectby查询中,我想知道什么是start with记录

    接下来是最令人困惑的部分:

    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
    
    这就是它的工作原理:

    • 带查询:1。父查询将执行:

      选择a、b、c
      从递归

      • 这将触发命名子查询的执行。2子查询的联合中的第一个查询执行,给我们一个种子行开始递归:
      选择a、b、c、id
      从测试1开始
      其中父项为空

    在这种情况下,如果父项为null,则id=1的种子行将为空。从这里开始,让我们将种子行称为“新结果”,新结果的含义是我们还没有完成对它们的处理

    • 子查询的联合中的第二个查询执行:

      选择(rec.a+rec.b)a
      ,t1.b
      ,(rec.a+rec.b+t1.b)c
      ,t1.id-rn
      来自递归rec,test1 t1
      其中t1.parent=rec.rn


    在不知道行之间的关系的情况下,我们如何计算前一行
    a和b
    列与当前行
    a列
    的总和。我在表中又创建了两个
    列id和父列
    ,以查找两行之间的关系

    parent
    是告诉我们上一行的
    的列,而
    id
    是该行的
    主键

    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;
    

  • 带有关键字的
    定义了子查询的名称
    recursive

    递归(a,b,c,rn)为

  • 接下来是命名子查询的第一部分

    选择a、b、c、id
    从测试1开始
    其中父项为空

  • 命名子查询是两个查询的联合。这是第一个查询,定义了递归的起点。在我的connectby查询中,我想知道什么是start with记录

    接下来是最令人困惑的部分:

    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
    
    这就是它的工作原理:

    • 带查询:1。父查询将执行:

      选择a、b、c
      从递归

      • 这将触发命名子查询的执行。2子查询的联合中的第一个查询执行,给我们一个种子行开始递归:
      选择a、b、c、id
      从测试1开始
      其中父项为空

    在这种情况下,如果父项为null,则id=1的种子行将为空。从这里开始,让我们将种子行称为“新结果”,新结果的含义是我们还没有完成对它们的处理

    • 子查询的联合中的第二个查询执行:

      选择(rec.a+rec.b)a
      ,t1.b
      ,(rec.a+rec.b+t1.b)c
      ,t1.id-rn
      来自递归rec,test1 t1
      其中t1.parent=rec.rn


    您希望选择上述格式的数据或以该格式插入数据。如果它已经被插入,简单的select语句将给出结果。对不起,我的错误,结果应该如上所述被选择。现在只有b列需要计算a和c。我现在看到您的编辑,这就提出了一个问题:您希望按什么顺序处理行?您希望选择上述格式的数据,还是以该格式插入数据。如果它已经被插入,简单的select语句将给出结果。对不起,我的错误,结果应该如上所述被选择。现在只有b列需要计算a和c。我现在看到您的编辑,这就提出了一个问题,您希望按什么顺序处理行?