У меня очень похожий сценарий, показанный в этой теме: Дублирующие группы записей для заполнения нескольких пробелов в датах в Google BigQuery
Используемый мной запрос выглядит следующим образом:
WITH history AS (
SELECT 2012 AS d, 'a' AS product, 'x' AS partner, 10 AS value UNION ALL
SELECT 2010 AS d, 'b' AS product, 'x' AS partner, 15 AS value UNION ALL
SELECT 2014 AS d, 'a' AS product, 'y' AS partner, 11 AS value UNION ALL
SELECT 2012 AS d, 'b' AS product, 'y' AS partner, 16 AS value UNION ALL
SELECT 2015 AS d, 'b' AS product, 'x' AS partner, 13 AS value UNION ALL
SELECT 2017 AS d, 'a' AS product, 'y' AS partner, 15 AS value UNION ALL
SELECT 2017 AS d, 'a' AS product, 'x' AS partner, 15 AS value
),
daterange AS (
SELECT EXTRACT(YEAR FROM fiscalYear) as date_in_range
FROM UNNEST(
GENERATE_DATE_ARRAY(DATE('2010-01-01'), CURRENT_DATE(), INTERVAL 1 YEAR)
) AS fiscalYear),
temp AS (
SELECT d, product, partner, value, LEAD(d) OVER(PARTITION BY product, partner ORDER BY d) AS next_d
FROM history
ORDER BY product, partner, d
)
SELECT date_in_range, product, partner, value
FROM daterange
JOIN temp
ON daterange.date_in_range >= temp.d
AND (daterange.date_in_range < temp.next_d OR temp.next_d IS NULL)
ORDER BY product, partner, date_in_range
Одна вещь, которую я заметил, которая не идеально подходит для моего сценария, это то, что даты для каждого продукта, комбинации партнеров не всегда начинаются в 2010 году, и это то, чего я хочу.
Таким образом, выходные данные для каждого продукта-партнера должны иметь date_in_range [2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019]
Выходные данные, которые возвращает этот запрос::
+---------------+---------+---------+-------+
| date_in_range | product | partner | value |
+---------------+---------+---------+-------+
| 2012 | a | x | 10 |
+---------------+---------+---------+-------+
| 2013 | a | x | 10 |
+---------------+---------+---------+-------+
| 2014 | a | x | 10 |
+---------------+---------+---------+-------+
| 2015 | a | x | 10 |
+---------------+---------+---------+-------+
| 2016 | a | x | 10 |
+---------------+---------+---------+-------+
| 2017 | a | x | 15 |
+---------------+---------+---------+-------+
| 2018 | a | x | 15 |
+---------------+---------+---------+-------+
| 2019 | a | x | 15 |
+---------------+---------+---------+-------+
| 2014 | a | y | 11 |
+---------------+---------+---------+-------+
| 2015 | a | y | 11 |
+---------------+---------+---------+-------+
| 2016 | a | y | 11 |
+---------------+---------+---------+-------+
| 2017 | a | y | 15 |
+---------------+---------+---------+-------+
| 2018 | a | y | 15 |
+---------------+---------+---------+-------+
| 2019 | a | y | 15 |
+---------------+---------+---------+-------+
| 2010 | b | x | 15 |
+---------------+---------+---------+-------+
| 2011 | b | x | 15 |
+---------------+---------+---------+-------+
| 2012 | b | x | 15 |
+---------------+---------+---------+-------+
| 2013 | b | x | 15 |
+---------------+---------+---------+-------+
| 2014 | b | x | 15 |
+---------------+---------+---------+-------+
| 2015 | b | x | 13 |
+---------------+---------+---------+-------+
| 2016 | b | x | 13 |
+---------------+---------+---------+-------+
| 2017 | b | x | 13 |
+---------------+---------+---------+-------+
| 2018 | b | x | 13 |
+---------------+---------+---------+-------+
| 2019 | b | x | 13 |
+---------------+---------+---------+-------+
| 2012 | b | y | 16 |
+---------------+---------+---------+-------+
| 2013 | b | y | 16 |
+---------------+---------+---------+-------+
| 2014 | b | y | 16 |
+---------------+---------+---------+-------+
| 2015 | b | y | 16 |
+---------------+---------+---------+-------+
| 2016 | b | y | 16 |
+---------------+---------+---------+-------+
| 2017 | b | y | 16 |
+---------------+---------+---------+-------+
| 2018 | b | y | 16 |
+---------------+---------+---------+-------+
| 2019 | b | y | 16 |
+---------------+---------+---------+-------+
Требуемый вывод:
+---------------+---------+---------+-------+
| date_in_range | product | partner | value |
+---------------+---------+---------+-------+
| 2010 | a | x | 10 |
+---------------+---------+---------+-------+
| 2011 | a | x | 10 |
+---------------+---------+---------+-------+
| 2012 | a | x | 10 |
+---------------+---------+---------+-------+
| 2013 | a | x | 10 |
+---------------+---------+---------+-------+
| 2014 | a | x | 10 |
+---------------+---------+---------+-------+
| 2015 | a | x | 10 |
+---------------+---------+---------+-------+
| 2016 | a | x | 10 |
+---------------+---------+---------+-------+
| 2017 | a | x | 15 |
+---------------+---------+---------+-------+
| 2018 | a | x | 15 |
+---------------+---------+---------+-------+
| 2019 | a | x | 15 |
+---------------+---------+---------+-------+
| 2010 | a | y | 11 |
+---------------+---------+---------+-------+
| 2011 | a | y | 11 |
+---------------+---------+---------+-------+
| 2012 | a | y | 11 |
+---------------+---------+---------+-------+
| 2013 | a | y | 11 |
+---------------+---------+---------+-------+
| 2014 | a | y | 11 |
+---------------+---------+---------+-------+
| 2015 | a | y | 11 |
+---------------+---------+---------+-------+
| 2016 | a | y | 11 |
+---------------+---------+---------+-------+
| 2017 | a | y | 15 |
+---------------+---------+---------+-------+
| 2018 | a | y | 15 |
+---------------+---------+---------+-------+
| 2019 | a | y | 15 |
+---------------+---------+---------+-------+
| 2010 | b | x | 15 |
+---------------+---------+---------+-------+
| 2011 | b | x | 15 |
+---------------+---------+---------+-------+
| 2012 | b | x | 15 |
+---------------+---------+---------+-------+
| 2013 | b | x | 15 |
+---------------+---------+---------+-------+
| 2014 | b | x | 15 |
+---------------+---------+---------+-------+
| 2015 | b | x | 13 |
+---------------+---------+---------+-------+
| 2016 | b | x | 13 |
+---------------+---------+---------+-------+
| 2017 | b | x | 13 |
+---------------+---------+---------+-------+
| 2018 | b | x | 13 |
+---------------+---------+---------+-------+
| 2019 | b | x | 13 |
+---------------+---------+---------+-------+
| 2010 | b | y | 16 |
+---------------+---------+---------+-------+
| 2011 | b | y | 16 |
+---------------+---------+---------+-------+
| 2012 | b | y | 16 |
+---------------+---------+---------+-------+
| 2013 | b | y | 16 |
+---------------+---------+---------+-------+
| 2014 | b | y | 16 |
+---------------+---------+---------+-------+
| 2015 | b | y | 16 |
+---------------+---------+---------+-------+
| 2016 | b | y | 16 |
+---------------+---------+---------+-------+
| 2017 | b | y | 16 |
+---------------+---------+---------+-------+
| 2018 | b | y | 16 |
+---------------+---------+---------+-------+
| 2019 | b | y | 16 |
+---------------+---------+---------+-------+