Oracle PL / SQL - вставка значений по максимуму столбцов - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь вставить данные (product, timestamp) в таблицу xyz из таблиц A, B и C с первичным ключом в качестве PRODUCT. Все три таблицы имеют столбец отметки времени вместе с другими столбцами. Я хочу вставить строку с продуктом и максимальной отметкой времени этих трех таблиц (A, B и C).

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

Вы не указываете, что вы хотите, чтобы происходило, если продукт уже существует в таблице xyz, поэтому при условии, что это не так, вы можете использовать запрос, подобный этому:

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
0 голосов
/ 02 мая 2018

Вы можете попробовать следующее:

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;

Надеюсь, это поможет.

0 голосов
/ 02 мая 2018

ОБНОВЛЕНО в соответствии с комментарием Сентин:

Попробуйте это (синтаксис не проверен):

INSERT INTO xyz (product , timestamp) 
 (
    SELECT product , MAX(A.timestamp) 
      FROM A
    UNION
    SELECT product , MAX(B.timestamp) 
      FROM B
    UNION
    SELECT product , MAX(C.timestamp) 
      FROM C
) ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...