Найти ближайшую будущую дату заданного количества недель цикла - PullRequest
0 голосов
/ 10 февраля 2020

Допустим, у меня есть:

start_date = '2020-01-06'

и date(now())

И я хочу найти ближайшую будущую дату, начиная с этого момента, это умножение 4 (n) ( или другое число) недельный цикл от start_date

Ожидаемый результат на сегодняшний день будет '2020-03-02'

Я не могу придумать какой-либо умной идеи, чтобы проверить это.

Буду очень признателен за любые предложения.

1 Ответ

2 голосов
/ 10 февраля 2020

Вы можете сделать арифметику дат:

  • вычислить разницу между текущей и датой привязки
  • разделить ее на 7 (дней в неделю) и 4 (недели)
  • взять следующее целочисленное значение из результата
  • , умножить на 4 и 7, затем добавить это число дней к текущей дате

В SQL:

date'2020-01-06' + ceil((current_date - date'2020-01-06')::numeric / 4 / 7)::int * 4 * 7

Dremo на DB Fiddlde :

with t as (select date'2020-01-06' anchor, 4 n)
select 
    anchor,
    n,
    current_date,
    anchor + ceil((current_date - anchor)::numeric / n / 7)::int * n * 7 next_date
from t
anchor     |  n | current_date | next_date 
:--------- | -: | :----------- | :---------
2020-01-06 |  4 | 2020-02-10   | 2020-03-02
...