Сравните поле, чтобы увидеть, изменилось ли оно со вчерашнего дня до сегодняшнего дня. - PullRequest
0 голосов
/ 28 сентября 2018

Мне нужно просмотреть записи, в которых COMP_DATE изменился или был добавлен со вчерашнего дня, и показать только записи, которые изменились.Мне нужно посмотреть, изменил ли кто-нибудь значение.

Я пробовал LAST_VALUE и LAG, но мне кажется, что не получается правильно сравнить.

Пример данных:

Date          JOB    COMP_DATE
SYSDATE -1   1       09-01-2017

SYSDATE      1       09-27-2018

SELECT

   JOB, COMP_DATE,

   LAST_VALUE(COMP_DATE) OVER (ORDER BY JOB ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS Last_Value

    FROM  JOB_TABLE

   *** I know this section is not valid ***

    Where LAST_VALUE <> Current COMP_DATE 

Ответы [ 3 ]

0 голосов
/ 28 сентября 2018

Первая часть получит измененные записи, часть после объединения все получит новые записи ... при условии, что я правильно интерпретирую структуру вашей таблицы.Хотя вам, возможно, придется поставить "вокруг имени поля" date ".

 select * from job_table j1
  join job_table j2 on j2.job_id=j1.job_id and j2.date = j1.date - 1
 where 
 j1.comp_date != j2.comp_date
 and j1.com_date=sysdate;
 union all
 select * from job_table j1 where not exists (select * from job_table j2
    where j1.date != j2.date and j1.job_id=j2.job_id)
0 голосов
/ 28 сентября 2018

Результат с использованием запроса флешбэка (заметьте, в вашем примере "as of timestamp" должен быть "вчера" - может сойти с рук с использованием sysdate -1, но я не могу сейчас перейти к oracle для тестирования.

Это скажет вам, что оно было изменено между вчера и сейчас, но с большей точностью, чем это.

 select j1.comp_date, j2.comp_date, j1.job_id
   from job_table j1
   left outer join job_table j2 
     as of timestamp('2018-09-28 00:00:00','yyyy-mm-dd hh:mi:ss')
     on j1.job_id=j2.job_id
   where j2.comp_date is null or j2.comp_date != j1.comp_date
0 голосов
/ 28 сентября 2018

Вы можете попробовать использовать подзапрос.

select * from (
    SELECT
        JOB, 
        COMP_DATE,
        LAG(COMP_DATE) OVER (ORDER BY JOB) AS Last_Value
    FROM JOB_TABLE
) t1
where  LAST_VALUE <> COMP_DATE 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...