select month, months_out from ( select month, GENERATE_ARRAY(0, DATE_DIFF(CURRENT_DATE(), month, MONTH)) as months, from UNNEST( (select GENERATE_DATE_ARRAY(CAST([STARTING_DATE] AS DATE), CAST(max(date_field) AS DATE), INTERVAL 1 MONTH) as date from [SOME_TABLE_WITH_A_DATE_FIELD]) ) as month ) CROSS JOIN UNNEST(months) as months_out