Oracle PL/SQL-基于最大列数插入值
我试图将数据(产品、时间戳)插入表a、B和C中的表xyz中,主键为产品。这三个表都有一个timestamp列和其他列。我想插入包含这三个表(A、B和C)的乘积和最大时间戳的行。根据Sentine的评论更新了: 尝试以下操作(语法未验证):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
如果表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;