Сравнить 2 поля даты - когда одно поле даты пусто - PullRequest
0 голосов
/ 26 сентября 2019

Я хотел выбрать строки, дата которых больше, чем дата последней обработки.Последняя обработанная дата находится в исторической таблице.

select id
from table1 
where to_date(last_updated_date,'MM/DD/YYYY HH24:MI:SS') 
              > select to_date(nvl(max(last_updated_date),sysdate),'MM/DD/YYYY HH24:MI:SS')
                from table1_hist;

Это возвращение ORA-01843: недопустимая ошибка месяца.

Я вручную вставил строку в таблицу1 как TO_DATE ('09 / 26/ 2019 14:37:49 ',' MM / DD / YYYY HH24: MI: SS '), а в table1_hist строк нет.Но когда я запрашиваю таблицу с помощью sql developer для table1, я получаю значение, которое отображается как «26 -SEP-19».last_updated_date - это поле даты.

Я хотел бы получить идентификаторы из таблицы1 после последнего выполненного времени.

Спасибо

Ответы [ 3 ]

0 голосов
/ 26 сентября 2019

Я предлагаю использовать аналитическую функцию следующим образом:

SELECT
    ID
FROM
    (
        SELECT
            T.ID,
            T.LAST_UPDATED_DATE,
            MAX(TH.LAST_UPDATED_DATE) OVER() AS M_LAST_UPDATED_DATE
        FROM
            TABLE1 T
            JOIN TABLE1_HIST TH ON ( T.ID = TH.ID ) 
            -- i am guessing that this is the join condition or you can use your own conition here
    )
WHERE
    LAST_UPDATED_DATE > COALESCE(M_LAST_UPDATED_DATE, SYSDATE)

Ура !!

0 голосов
/ 26 сентября 2019

Прежде всего, вам не нужно преобразование to_date для сравнения.

Если table1_hist имеет хотя бы одно ненулевое значение, тогда достаточно использовать

select t.id
  from table1 t
 where t.last_updated_date > ( select max(th.last_updated_date) from table1_hist th )

, новсе эти значения равны нулю, затем используйте запрос, такой как:

select t.id
  from table1 t
 where t.last_updated_date > 
 (select nvl(max(th.last_updated_date),t.last_updated_date-1) from table1_hist th)

Демо

0 голосов
/ 26 сентября 2019

SYSDATE - это значение ДАТА.Использование TO_DATE() для значения, которое уже является DATE, бесполезно.

Попробуйте

where last_updated_date >
       (select MAX(NVL(last_updated_date, SYSDATE)) from table1_hist);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...