Here is a data.table approach which uses non-equi joins and then assigns the value to the original data.frame.
library(data.table)
library(tibble)
date_lookup<-tibble(start = lubridate::dmy("01012020", "01022020"),
end = lubridate::dmy("31012020", "28022020"),
id = c(1, 2))
df<-tibble(record = c("A", "B"),
date = lubridate::dmy("15022020", "03012020"))
setDT(date_lookup)
setDT(df)
df[date_lookup,
on = .(date >= start,
date <= end),
id := id]
df
#> record date id
#> 1: A 2020-02-15 2
#> 2: B 2020-01-03 1