Я думаю,
If the date is 30-OCT-2018 (20181030), then you want last friday date as 26-OCT - 2018 (20181026).
Другой сценарий:
If the date is 27-OCT-2018 (20181027), in that case also you want last friday date which is 26-OCT - 2018 (20181026).
Если мое предположение верно, тогда может работать следующий запрос:
WITH TEMP1 AS
(
SELECT TO_CHAR(
TO_DATE('20181030','YYYYMMDD') ,'DD-MON-YY') AS DATE_TEST
FROM DUAL
)
SELECT next_day (TO_DATE(DATE_TEST,'DD-MON-YY')-7,'FRIDAY') Last_Friday
FROM TEMP1;
Будет отображаться вывод:
LAST_FRIDAY
26-OCT-18
Который вы можете конвертировать позже в нужном вам формате.
Контрольный пример 2
WITH TEMP1 AS
(
SELECT TO_CHAR(
TO_DATE('20181103','YYYYMMDD') ,'DD-MON-YY') AS DATE_TEST
FROM DUAL
)
SELECT next_day (TO_DATE(DATE_TEST,'DD-MON-YY')-7,'FRIDAY') Last_Friday
FROM TEMP1;
Выход:
LAST_FRIDAY
02-NOV-18
Теперь нарушение вышеуказанного запроса:
В CTE используется предложение WITH.
WITH TEMP1 AS
(
SELECT TO_CHAR(
TO_DATE('20181103','YYYYMMDD') ,'DD-MON-YY') AS DATE_TEST
FROM DUAL
)
Здесь TO_DATE ('20181103', 'YYYYMMDD'), 'DD-MON-YY' - преобразует 20181103 в 03-NOV-2018.
Таким образом, результат предложения WITH (который является 03-NOV-2018) будет использоваться в другом запросе:
SELECT next_day (TO_DATE(DATE_TEST,'DD-MON-YY')-7,'FRIDAY') Last_Friday
FROM TEMP1;
Здесь DATE_TEST выводится из предложения with. Первый
TO_DATE(DATE_TEST,'DD-MON-YY')-7
Это занимает предыдущие 7 дней с указанной даты (которая в настоящее время DATE_TEST: 03-NOV -2018) Так что все последние 7 дней будут проходить с 03-NOV-2018.
Предполагается:
DATE DAY Order
28-10-2018 SUN 1
29-10-2018 MON 2
30-10-2018 TUE 3
31-10-2018 WED 4
01-11-2018 THURS 5
02-11-2018 FRI 6
03-11-2018 SAT 7
Мы получили все 7 дней, упомянутых выше.
next_day (TO_DATE(DATE_TEST,'DD-MON-YY')-7,'FRIDAY')
Теперь со следующего дня мы можем получить еще один день, и здесь мы просим пятницу, упоминая об этом в аргументе. Итак, пятница 02-11-2018.
Так что выходной будет 02-11-2018.