## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

## ----library, eval = requireNamespace("tidyverse")----------------------------
# library(tidyverse)

## ----setup, include = FALSE, eval = requireNamespace("tidyverse")-------------
# 
# forecasts_full <- tribble(
#   ~City, ~Forecast, ~ForecastDate,
#   "New York",    20, "2023-09-28",
#   "Los Angeles", 23, "2023-09-28",
#   "Seattle",     16, "2023-09-28",
#   "Houston",     34, "2023-09-28",
#   "New York",    18, "2023-09-29",
#   "Los Angeles", 25, "2023-09-29",
#   "Seattle",     17, "2023-09-29",
#   "Houston",     34, "2023-09-29"
# ) %>%
#   mutate(across("ForecastDate", as.Date))
# 
# forecasts_scd <- forecasts_full %>%
#   mutate(ForecastFrom = ForecastDate,
#          ForecastUntil = case_when(
#            City == "Houston" ~ as.Date(NA),
#            ForecastDate == "2023-09-29" ~ as.Date(NA),
#            TRUE ~ as.Date("2023-09-29")
#          )) %>%
#   filter(!(City == "Houston" & ForecastFrom == "2023-09-29")) %>%
#   distinct() %>%
#   select(!"ForecastDate") %>%
#   arrange(ForecastFrom)
# 
# forecasts_dated <- filter(forecasts_full, ForecastDate == "2023-09-28")
# forecasts <- select(forecasts_dated, !"ForecastDate")
# 
# forecasts2 <- filter(forecasts_full, ForecastDate == "2023-09-29") %>%
#   select(!"ForecastDate")
# forecasts2a <- filter(forecasts_full, ForecastDate == "2023-09-29")

## ----forecasts, eval = requireNamespace("tidyverse")--------------------------
# # Current date: 2023-09-28
# forecasts

## ----forecasts2a, eval = requireNamespace("tidyverse")------------------------
# # Current date: 2023-09-29
# forecasts2

## ----forecasts_full, eval = requireNamespace("tidyverse")---------------------
# forecasts_full

## ----forecasts_full_examples, eval = requireNamespace("tidyverse")------------
# 
# # Current forecasts
# forecasts_full %>%
#   slice_max(ForecastDate, n = 1) %>%
#   select(!"ForecastDate")
# 
# # Forecasts for a given date
# forecasts_full %>%
#   filter(ForecastDate == "2023-09-28")
# 
# # Full history for a given city
# forecasts_full %>%
#   filter(City == "New York")

## ----forecasts_scd, eval = requireNamespace("tidyverse")----------------------
# forecasts_scd

## ----adresses_setup, include = FALSE, eval = requireNamespace("tidyverse")----
# addresses <- tibble::tibble(
#   ID = c(1,
#          2,
#          1,
#          1),
#   GivenName = c("Alice",
#                 "Robert",
#                 "Alice",
#                 "Alice"),
#   Surname = c("Doe",
#               "Tables",
#               "Doe",
#               "Doe"),
#   Address = c("Donut Plains 1",
#               "Rainbow Road 8",
#               "Donut Plains 1",
#               "Rainbow Road 8"),
#   MovedIn = c("1989-06-26",
#               "1989-12-13",
#               "1989-06-26",
#               "2021-03-01"),
#   MovedOut = c(NA,
#                NA,
#                "2021-03-01",
#                NA),
#   ValidFrom = c("1989-06-26",
#                 "1989-12-13",
#                 "2021-03-08",
#                 "2021-03-08"),
#   ValidUntil = c("2021-03-08",
#                  NA,
#                  NA,
#                  NA)
# ) %>%
#   mutate(across(c("MovedIn", "MovedOut", "ValidFrom", "ValidUntil"), as.Date))
# 
# 
# name_change_date <- as.Date("2023-08-28")
# addresses2 <- addresses %>%
#   filter(ID == 1) %>%
#   {
#     .data <- .
# 
#     .data %>%
#       filter(Address == "Rainbow Road 8") %>%
#       mutate(Surname = "Tables",
#              ValidFrom = !!name_change_date) %>%
#       bind_rows(.data)
#   } %>%
#   mutate(
#     ValidUntil = as.Date(
#       c(NA, !!name_change_date, NA, !!name_change_date),
#       origin = "1970-01-01"
#     )
#   ) %>%
#   bind_rows(filter(addresses,
#                    ID == 2)) %>%
#   arrange(ValidFrom) %>%
#   distinct()

## ----addresses1, eval = requireNamespace("tidyverse")-------------------------
# addresses

## ----addresses1a, eval = requireNamespace("tidyverse")------------------------
# slice_timestamp <- "2021-03-02"
# 
# addresses %>%
#   filter(ID == 1,
#          ValidFrom < !!slice_timestamp,
#          ValidUntil >= !!slice_timestamp | is.na(ValidUntil)) %>%
#   select(!c("ValidFrom", "ValidUntil"))

## ----addresses2, eval = requireNamespace("tidyverse")-------------------------
# filter(addresses2,
#        ID == 1,
#        Address == "Rainbow Road 8") %>%
#   select(ID, GivenName, Surname, MovedIn, MovedOut, ValidFrom, ValidUntil)

## ----addresses3, eval = requireNamespace("tidyverse")-------------------------
# slice_timestamp <- "2022-03-04"
# 
# addresses2 %>%
#   filter(Address == "Rainbow Road 8",
#          is.na(MovedOut),
#          ValidFrom < !!slice_timestamp,
#          ValidUntil >= !!slice_timestamp | is.na(ValidUntil)) %>%
#   select(ID, GivenName, Surname, MovedIn, MovedOut)
# 
# slice_timestamp <- "2023-09-29"
# 
# addresses2 %>%
#   filter(Address == "Rainbow Road 8",
#          is.na(MovedOut),
#          ValidFrom < !!slice_timestamp,
#          ValidUntil >= !!slice_timestamp | is.na(ValidUntil)) %>%
#   select(ID, GivenName, Surname, MovedIn, MovedOut)

