Функция, которая принимает дату начала и окончания и подсчитывает, сколько воскресений между этими датами выпало на 1-е число месяца на kdb + - PullRequest
1 голос
/ 14 января 2020

Создание функции, которая берет дату начала и окончания и подсчитывает, сколько воскресений между этими датами выпало на 1-е число месяца на kdb +, как мне это сделать?

Функция должна показать, сколько раз это произошло с 1950 года

1 Ответ

0 голосов
/ 16 января 2020

Давайте сначала определим функцию, которая возвращает день недели своего аргумента (типа date).

Основополагающим значением даты является количество дней с 01.01.2000, и мы знаем, что 01.01.2000 была суббота. Следующий день был, очевидно, воскресеньем, а затем понедельником и т. Д. c. и каждый 7-й, 14-й, 21-й и т. д. c. день после и до 1 января 2000 года тоже была суббота. Поэтому, если мы возьмем дату по модулю 7, мы получим номер дня недели, где 0 - суббота, 1 - воскресенье и т. Д. c. что приводит нас к следующему определению.

weekday:{ `sat`sun`mon`tue`wed`thu`fri x mod 7 }

Теперь мы можем создать функцию, которая отвечает на исходный вопрос:

sundaysThe1st:{[start;end]sum `sun=weekday dates where 1=`dd$dates:start+til 1+end-start }

start+til 1+end-start генерирует список дат между start и end, dates where 1=`dd$dates возвращает только первые дни месяцев, а `sun=weekday dates возвращает 1b, если 1-й день месяца - воскресенье, и 0b в противном случае. sum - это фактически число единиц, и это именно то, что нам нужно.

Надеюсь, это поможет.

...