This question is about shifting values of a year-week field in bigquery.
run_id year_week value
0001 201451 13
0001 201452 6
0001 201503 3
0003 201351 8
0003 201352 5
0003 201403 1
Here for each year the week can range from 01 to 53. For example year 2014 has last week which is 201452 but year 2015 has last week which is 201553.
Now I want to shift the values for each year_week
in each run_id
by 5 weeks. For the weeks there is no value it is assumed that they have a value of 0. For example the output from the example table above should look like this:
run_id year_week value
0001 201504 13
0001 201505 6
0001 201506 0
0001 201507 0
0001 201508 3
0003 201404 8
0003 201405 5
0003 201406 0
0003 201407 0
0003 201408 1
Explanation of the output: In the table above for run_id
0001 the year_week
201504 has a value of 13 because in the input table we had a value of 13 for year_week
201451 which is 5 weeks before 201504.
I could create a table programmatically by creating a mapping from a year_week
to a shifted year_week
and then doing a join to get the output, but I was wondering if there is any other way to do it by just using sql.