Ниже для BigQuery Standard SQL
#standardSQL
SELECT
a.date, a.location, a.revenue,
DATE_SUB(a.date, INTERVAL 1 YEAR) date_last_year,
IFNULL(b.revenue, 0) revenue_last_year
FROM `project.dataset.table` a
LEFT JOIN `project.dataset.table` b
ON a.location = b.location
AND DATE_SUB(a.date, INTERVAL 1 YEAR) = b.date
Вы можете протестировать, поиграть с выше, используя фиктивные данные, как в примере ниже
#standardSQL
WITH `project.dataset.table` AS (
SELECT DATE '2018-02-20' `date`, 'A' location, 1 revenue UNION ALL
SELECT '2018-02-20', 'B', 2 UNION ALL
SELECT '2018-02-21', 'A', 3 UNION ALL
SELECT '2018-02-22', 'B', 4 UNION ALL
SELECT '2019-02-20', 'A', 5 UNION ALL
SELECT '2019-02-20', 'B', 6 UNION ALL
SELECT '2019-02-21', 'A', 7 UNION ALL
SELECT '2019-02-21', 'B', 8 UNION ALL
SELECT '2019-02-22', 'A', 9 UNION ALL
SELECT '2019-02-22', 'B', 10
)
SELECT
a.date, a.location, a.revenue,
DATE_SUB(a.date, INTERVAL 1 YEAR) date_last_year,
IFNULL(b.revenue, 0) revenue_last_year
FROM `project.dataset.table` a
LEFT JOIN `project.dataset.table` b
ON a.location = b.location
AND DATE_SUB(a.date, INTERVAL 1 YEAR) = b.date
-- ORDER BY a.date, a.location
с результатом
Row date location revenue date_last_year revenue_last_year
1 2018-02-20 A 1 2017-02-20 0
2 2018-02-20 B 2 2017-02-20 0
3 2018-02-21 A 3 2017-02-21 0
4 2018-02-22 B 4 2017-02-22 0
5 2019-02-20 A 5 2018-02-20 1
6 2019-02-20 B 6 2018-02-20 2
7 2019-02-21 A 7 2018-02-21 3
8 2019-02-21 B 8 2018-02-21 0
9 2019-02-22 A 9 2018-02-22 0
10 2019-02-22 B 10 2018-02-22 4