我希望将Google BigQuery用于我预计必须经常运行有状态查询的框架。通过有状态查询,我的意思是查询使用在运行时与行关联的状态。
例如,针对给定订单的第X
列的第一行查询,其中列xflag
设置为1
并从第一行中减去Y
列yflag
的列firstx
设置为1。
我运行这些查询的方法是创建中间表。在上面的示例中,标记" first"两种类型的行都带有firsty
或ActiveSheet.TextBox1.Value = 5
标志,然后在两个单独的查询中计算它们的差异。这非常麻烦。有没有更简单的方法呢?
答案 0 :(得分:1)
您可以考虑使用子查询,而不是中间表,
SQL WITH clause可能是不错的选择,它允许您多次引用子查询数据,简化逻辑,即基于特定的列和行值。
您也可以考虑使用CASE expression或 WINDOW function
答案 1 :(得分:1)
考虑下面的“一次性”选项
适用于bigquery标准sql
#standardSQL
SELECT
ARRAY_AGG(x ORDER BY IF(xflag = 1, xpos, 9999) LIMIT 1)[SAFE_OFFSET(0)] -
ARRAY_AGG(y ORDER BY IF(yflag = 1, ypos, 9999) LIMIT 1)[SAFE_OFFSET(0)] diff
FROM `yourproject.yourdataset.yourtable`
注意 - 它假定您用于确定given order
的字段为xpos
和ypos
。另请注意使用9999 - 在您的情况下,此值应与上述xpos
和ypos
的类型相同,并且该值必须大于表格中这些字段的任何可能值 - 这样才能确保只计算xflag = 1和yflag - 1行
通常这样的位置字段是时间戳类型,因此您可以使用类似CURRENT_TIMESTAMP()
的内容