Это сделает это:
select ((next_day(date2-7,'FRI')-next_day(date-1,'FRI'))/7)+1 as num_fridays
from data
Возможно, лучше, если я разобью это.Функция NEXT_DAY возвращает следующий день, который является (в данном случае пятницей) после даты.
Таким образом, найти первую пятницу после d1 будет:
next_day( d1, 'FRI')
Но если d1 является пятницей, которая вернет следующую пятницу, мы корректируем:
next_day( d1-1, 'FRI')
Аналогично, чтобы найти последнюю пятницу вплоть до d2 включительно:
next_day( d1-7, 'FRI')
Вычитание 2 дает число дней: 0, если они совпадают, 7, если они с интервалом в неделю и т. Д .:
next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')
Преобразование в недели:
(next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')) / 7
Наконец, если они имеют одинаковую дату, мы получаем 0, но на самом деле это 1 пятница, и так далее, поэтому мы добавляем одну:
((next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')) / 7) + 1