ORACLE SQL: найдите последнюю строку в столбце, затем обновите данные из других данных, не затрагивая более старые данные - PullRequest
1 голос
/ 21 февраля 2020

Я сейчас учусь кодировать в Oracle SQL. Ссылаясь на пример на фото, которое я приложил, я хотел бы, чтобы в моем сценарии была указана последняя дата в таблице A, если дата (таблица A) меньше даты в таблице B, а затем вставьте только самые последние данные даты из таблицы B в A без влияния на более ранние данные в таблице A.

table example.

Причина в том, что данные таблицы B хранятся по месяцам, то есть данные за январь будут удалены при переходе на февраль. Поэтому цель таблицы A - сохранить все данные, которые я хочу получить из таблицы B.

А как мне встроить скрипт в таблицу, чтобы он запускался каждый день?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2020

Если я правильно понимаю, в Oracle 12c + вы можете использовать:

insert into a (date, sales)
    select date, sales
    from b
    where b.date > (select max(a.date) from a)
    order by date desc
    fetch first 1 row only;

order by и fetch гарантируют, что вставлена ​​только самая последняя строка.

В более ранних версиях вы можете использовать подзапрос:

insert into a (date, sales)
    select date, sales
    from (select b.*, row_number() over (order by date desc) as seqnum
          from b
          where b.date > (select max(a.date) from a)            
         ) b
    where seqnum = 1;

Примечание: если вы будете запускать этот код каждый день, вы просто вставите каждую строку b в a. Я полагаю, вы знаете об этом.

0 голосов
/ 21 февраля 2020

Попробуйте это:

insert into TableA (
select * from TableB where date >(select max(date) from TableA)
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...