Возврат данных с датой от 2 месяцев назад (с использованием Oracle SQL) - PullRequest
0 голосов
/ 29 октября 2019

Интересно, есть ли у кого-нибудь решение этой проблемы? Я пытаюсь вернуть результаты, где дата увольнения Работника указана в месяце 2 месяца назад, поэтому, если отчет готовится в октябре, я хочу видеть людей с датами увольнения в августе.

В настоящее время лучшее, что я могу придумать, это

Где Месяц (saw_4) = месяц (SYSDATE) -2

Но это не такне собираюсь работать на SYSDATE в январе и феврале (плюс, похоже, он все равно не хочет работать на Oracle OTBI, поэтому я буду работать в BI, я думаю)

SELECT "Worker"."Person Number" AS saw_0, 
"Worker"."Employee Last Name" AS saw_1, 
"Worker"."Employee First Name" AS saw_2, 
"Worker"."Primary National Identifier Number" AS saw_3, 
"Worker"."Termination Date" AS saw_4 
FROM "Workforce Management - Work Relationship Real Time" 
Where Month(saw_4) = month(SYSDATE)-2

Любая помощь, с благодарностью полученная,

Ответы [ 2 ]

0 голосов
/ 29 октября 2019

Я был бы склонен написать это как:

where termination_date >= trunc(add_months(sysdate, -2), 'mm') and
      termination_date < trunc(add_months(sysdate, -1), 'mm') 

Предположительно, termination_date не имеет временной компоненты. Но, увы, в Oracle тип данных date всегда есть. Так что это кажется более безопасным в качестве общего решения.

0 голосов
/ 29 октября 2019

Это может быть что-то вроде этого:

where termination_date between trunc(add_months(sysdate, -2), 'mm')
                           and last_day(add_months(sysdate, -2))

Почему, если есть проще

where to_char(termination_date, 'yyyymm') = to_char(add_months(sysdate, -2), 'yyyymm')

Потому что это приведет к тому, что возможный индекс на termination_date будет непригодный (если у вас нет индекса на основе функций, а люди обычно его не имеют).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...