Добавление 1 к временному столбцу строк в Google BigQuery Standard SQL - PullRequest
0 голосов
/ 04 июня 2019

Столбец - это строка для времени года + FiscalWeek, например "201916".

Я использовал REPLACE (COLUMN, "2019", ""), чтобы оставить столбец с номером недели, теперь column = "16"

Но теперь я присоединяюсь к этой неделе с другой таблицей, которая смещена на одну неделю. Теперь я хотел бы добавить 1 к каждой записи вниз по столбцу, например, 16 = 17, 18 = 19.

Ответы [ 2 ]

0 голосов
/ 06 июня 2019

Самый простой способ для этого - преобразовать финансовую неделю в INT64, а затем вычесть 1 в FW 2018.Этот запрос должен работать для вас:

SELECT * from table2019 a
join table2018 b on SUBSTR(a.week2019,5) = SUBSTR(CAST(CAST(b.week2018 as int64) - 1 
as STRING),5)

С некоторыми фиктивными данными:

#standardSQL
with table2019 as (
 SELECT CAST(week as string) as week2019
 FROM UNNEST(generate_array(201901,201915)) as week
),
table2018 as (
 SELECT CAST(week as string) as week2018
 FROM UNNEST(generate_array(201801,201815)) as week
)
SELECT * from table2019 a
join table2018 b on SUBSTR(a.week2019,5) = SUBSTR(CAST(CAST(b.week2018 as int64) - 1 as STRING),5)

он возвращает:

Row week2019    week2018     
1   201901  201802   
2   201902  201803   
3   201903  201804   
4   201904  201805   
5   201905  201806   
6   201906  201807   
7   201907  201808   
8   201908  201809   
9   201909  201810   
10  201910  201811   
11  201911  201812   
12  201912  201813   
13  201913  201814   
14  201914  201815   

Он объединяет неделю1 2019 сweek2 of 2018. Обратите внимание, что последняя неделя 2019 года может не совпадать с любой из 2018, если у них одинаковое количество недель (или в 2018 году меньше недель, чем в 2019 году).

0 голосов
/ 04 июня 2019

Я бы порекомендовал превратиться в число.Если вы имеете дело только с одним годом, то:

select cast(column as int64)

Затем вы можете сравнить его с предыдущей неделей.

При переходе между годами у вас возникла проблема.У некоторых лет 52 недели, у некоторых 53 недели.Таким образом, вы не знаете, будет ли неделя до 201901 года 201853 или 201852. Здесь может помочь либо таблица календаря, либо использование определений ISO.

...