在BigQuery中,可以使用标准SQL中的LAG()
函数来获取最接近的前一个值,并进行左连接。以下是一个包含代码示例的解决方法:
WITH data AS (
SELECT '2021-01-01' AS date, 10 AS value UNION ALL
SELECT '2021-01-03' AS date, 20 AS value UNION ALL
SELECT '2021-01-06' AS date, 30 AS value
), reference AS (
SELECT '2021-01-02' AS date, 100 AS reference_value UNION ALL
SELECT '2021-01-04' AS date, 200 AS reference_value UNION ALL
SELECT '2021-01-05' AS date, 300 AS reference_value
)
SELECT
data.date,
data.value,
reference.date AS reference_date,
reference.reference_value
FROM
data
LEFT JOIN
reference ON data.date = reference.date OR data.date = LAG(reference.date) OVER (ORDER BY reference.date)
在上面的示例中,我们有两个表:data
和reference
。data
表包含日期和值,reference
表包含日期和参考值。通过使用LAG()
函数,我们将data
表的日期与reference
表的日期进行比较,找到最接近的前一个日期,并进行左连接。
运行此查询会返回以下结果:
+------------+-------+----------------+------------------+
| date | value | reference_date | reference_value |
+------------+-------+----------------+------------------+
| 2021-01-01 | 10 | null | null |
| 2021-01-03 | 20 | 2021-01-02 | 100 |
| 2021-01-06 | 30 | 2021-01-05 | 300 |
+------------+-------+----------------+------------------+
注意:在实际使用中,你需要替换data
和reference
的表名以及选择你需要的列。