【问题标题】:How can I avoid self join in BigQuery如何避免在 BigQuery 中自我加入
【发布时间】:2021-05-19 12:07:04
【问题描述】:

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

id Previous id Value
30 20 8000
20 10 5000

输出如下:

id Previous_id Value Previous_Value
30 20 8000 5000
20 10 5000 -

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

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

【问题讨论】:

    标签: sql join google-bigquery analytic-functions


    【解决方案1】:

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

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

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

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

    在性能方面,JOIN 不用太担心。它是一个等值连接,因此 BigQuery 应该知道如何以最佳方式运行它。

    【讨论】:

    • 我正要发同样的东西,但我想我LAGged 太多了:-)
    猜你喜欢
    • 2014-05-16
    • 2017-09-20
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    相关资源
    最近更新 更多