首页 > 解决方案 > 如何避免在 BigQuery 中自我加入

问题描述

我有下表,我想从那里添加具有前一个值的另一列:

ID 以前的身份证 价值
30 20 8000
20 10 5000

输出如下:

ID 上一个_id 价值 Previous_Value
30 20 8000 5000
20 10 5000 -

我知道我可以运行您可以在下面看到的自我加入,但我想知道是否有更好的做法,因为这是我必须在其他类似用例中定期运行的操作。我已经尝试过分析函数,但我找不到它们的解决方案......

SELECT t1.*, t2.Value as Previous_Value
FROM `Table` t1
LEFT JOIN `Table`t2
ON t1.Previous_id = t2.id

标签: sqljoingoogle-bigqueryanalytic-functions

解决方案


自联接是正确的方法,因为您的数据是“链接的”。

如果先前的 id 严格来说是在给定 id 之前以数字形式出现的 id,则可以使用LAG()

SELECT t.*, LAG(t.Value) OVER (ORDER BY t.id) as Previous_Value
FROM `Table` t;

但是,您的数据中可能不是这种情况(尽管您的示例数据中是这种情况)。

在性能方面,您无需过多担心JOIN. 它是一个等值连接,因此 BigQuery 应该知道如何以最佳方式运行它。


推荐阅读