Oracle: последняя пятница предыдущего месяца - PullRequest
0 голосов
/ 20 мая 2018
    SELECT 
      TO_CHAR(NEXT_DAY(LAST_DAY(SYSDATE)-7, 'FRIDAY'),
                       ' DD MONTH, YYYY') "LAST_FRIDAY"
    FROM DUAL;

это даст мне текущий месяц в прошлую пятницу.Мне нужен предыдущий месяц в прошлую пятницу.

Ответы [ 2 ]

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

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

Моя логика для этого:

1-Получить последний день предыдущего месяца

2-Получить день неделиот даты элемента 1

3-Некоторая логика с "регистром" для получения желаемой даты

select case
         when WLD = 7 then LD-1 -- if Saturday, get previous day
         when WLD = 6 then LD   -- if Friday, then ok
         when WLD = 5 then LD-6 -- if Thursday, get 6 days ago
         when WLD = 4 then LD-5 -- if Wednesday, get 5 days ago
         when WLD = 3 then LD-4 -- if Tuesday, get 4 days ago
         when WLD = 2 then LD-3 -- if Monday, get 3 days ago
         when WLD = 1 then LD-2 -- if Sunday, get 2 days ago
       end as LAST_FRIDAY_LAST_MONTH -- HERE IS THE LAST FRIDAY OF MONTH
  from (          
        select last_day(add_months(trunc(sysdate),-1))               as LD   -- last day of previous month
             , to_char(last_day(add_months(trunc(sysdate),-1)),'D')  as WLD  -- week day of last day of previous month
          from dual
       )
0 голосов
/ 20 мая 2018

Вы собираетесь закрыть, просто вам нужно использовать ADD_MONTH, как показано ниже:

1.Сравните с Сегодня.

  SELECT 
      TO_CHAR(NEXT_DAY(LAST_DAY(add_months(SYSDATE,-1))-7, 'FRIDAY'),
                       ' DD MONTH, YYYY') "LAST_FRIDAY"
    FROM DUAL;

2.Чтобы получить статический последний день

select dt
from(
SELECT to_char(last_day(add_months(sysdate,-1)),'DD MONTH, YYYY') dt,
        to_char(last_day(add_months(sysdate,-1))-level,'DAY') dy
  FROM DUAL
  connect by rownum <= 7
) where trim(dy) = 'FRIDAY'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...