Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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/3/templates/2.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
Oracle PL/SQL-基于最大列数插入值_Sql_Oracle - Fatal编程技术网

Oracle PL/SQL-基于最大列数插入值

Oracle PL/SQL-基于最大列数插入值,sql,oracle,Sql,Oracle,我试图将数据(产品、时间戳)插入表a、B和C中的表xyz中,主键为产品。这三个表都有一个timestamp列和其他列。我想插入包含这三个表(A、B和C)的乘积和最大时间戳的行。根据Sentine的评论更新了: 尝试以下操作(语法未验证): 如果表xyz中已经存在product,则不指定要执行的操作,因此假设它不存在,可以使用如下查询: Insert into XYZ(Product, Timestamp) Select Product, max(timestamp) from (select

我试图将数据(产品、时间戳)插入表a、B和C中的表xyz中,主键为产品。这三个表都有一个timestamp列和其他列。我想插入包含这三个表(A、B和C)的乘积和最大时间戳的行。

根据Sentine的评论更新了

尝试以下操作(语法未验证):


如果表xyz中已经存在product,则不指定要执行的操作,因此假设它不存在,可以使用如下查询:

Insert into XYZ(Product, Timestamp)
Select Product, max(timestamp)
  from (select product, timestamp from a union all
        select product, timestamp from b union all
        select product, timestamp from c)
 group by product

您可以尝试以下方法:

INSERT INTO xyz
  ( product, timestamp )
SELECT MAX(product) KEEP ( DENSE_RANK FIRST ORDER BY timestamp DESC ) AS product
     , MAX(timestamp)
  FROM a
 UNION ALL
SELECT MAX(product) KEEP ( DENSE_RANK FIRST ORDER BY timestamp DESC ) AS product
     , MAX(timestamp)
  FROM b
 UNION ALL
SELECT MAX(product) KEEP ( DENSE_RANK FIRST ORDER BY timestamp DESC ) AS product
     , MAX(timestamp)
  FROM c;

希望这能有所帮助。

您应该展示您迄今为止所做的尝试,以及它不起作用的原因。。不要把你的问题抛在脑后,指望别人会为你提问。你可以添加更多的细节,比如所需结果的示例;源表数据示例您不能像这样将子查询中的4列插入目标表中的两列。@Sentinel,rRe thinkingHe希望获得所有表的最大时间戳,即每个表(A、B和C)的最大值为3条记录。否OP声明Product是表XYZ的主键,因此只有一条Product记录,和所有三个表(A、B和C)的最大时间戳。请删除-1。
INSERT INTO xyz
  ( product, timestamp )
SELECT MAX(product) KEEP ( DENSE_RANK FIRST ORDER BY timestamp DESC ) AS product
     , MAX(timestamp)
  FROM a
 UNION ALL
SELECT MAX(product) KEEP ( DENSE_RANK FIRST ORDER BY timestamp DESC ) AS product
     , MAX(timestamp)
  FROM b
 UNION ALL
SELECT MAX(product) KEEP ( DENSE_RANK FIRST ORDER BY timestamp DESC ) AS product
     , MAX(timestamp)
  FROM c;