Получаете список следующих n дней недели? - PullRequest
0 голосов
/ 30 июня 2018

У меня есть два столбца дней недели и количество дней между этими днями, например:

Monday  | Saturday    | 13
Tuesday | Friday      | 54
Friday  | Wednesday   | 10

и т.д.. Мне нужно использовать SQL, чтобы создать другой столбец, содержащий строку со всеми 13 или 54 днями недели между двумя днями недели. Так что-то вроде "понедельник, вторник, среда, ... понедельник, вторник ... пятница, суббота"

Как это можно сделать? Спасибо.

1 Ответ

0 голосов
/ 30 июня 2018

Ниже для BigQuery Standard SQL

#standardSQL
SELECT start, duration,
  REGEXP_EXTRACT(
    REPEAT('Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday,',CAST(duration/7+1 AS INT64)),
    CONCAT(r'', start, r'(?:(?:,\w+){', CAST(duration - 1 AS STRING), '})')
  ) days_list
FROM `project.dataset.table`   

вы можете протестировать / поиграть с ним, используя фиктивные данные из вашего вопроса, как показано ниже

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 'Monday' start, 'Saturday' finish, 13 duration UNION ALL
  SELECT 'Tuesday', 'Friday', 54 UNION ALL
  SELECT 'Friday', 'Wednesday', 10 
)
SELECT start, duration,
  REGEXP_EXTRACT(
    REPEAT('Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday,', CAST(duration / 7 + 1 AS INT64) ), 
    CONCAT(r'', start, r'(?:(?:,\w+){', CAST(duration - 1 AS STRING), '})')
  ) days_list
FROM `project.dataset.table`   

с результатом как

Row start   duration    days_list    
1   Monday  13  Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday   
2   Tuesday 54  Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday    
3   Friday  10  Friday,Saturday,Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
...