SQL - Bigquery - 在集群分区上排名

SQL - Bigquery - Rank on clustered partitions

我在 Bigquery 上遇到了一个分析函数挑战,这让我很困惑。对不起,如果我在这里遗漏了任何基本功能,但我找不到它。

无论如何我认为这可以引起很好的讨论。

我想在组(dense_rank 或 row_number 或类似的东西)中获得排名,但在集群方式上,这是棘手的一点。

例如,我想创建的集群不仅基于两个分区列(见下图),而且还基于它们之间的顺序。这就是为什么我称它为集群。如果相邻,则每个集群应具有相同的等级,但如果不是(它被其他集群拆分),则应具有不同的编号。

因此,对于集群“a,x”,第一个集群的所有行的编号为 1,然后第二个集群的所有行的编号为 2,依此类推。

我怎样才能做到这一点?是否有开箱即用的分析功能,或者这是否需要一些辅助列?

提前致谢。

考虑以下方法

select partition_col_1, partition_col_2, order_col, 
  dense_rank() over(partition by partition_col_1, partition_col_2 order by group_number) output
from (
  select *, countif(group_start) over(order by order_col) group_number
  from (
    select *, 
      ifnull((partition_col_1, partition_col_2) != lag((partition_col_1, partition_col_2)) over(order by order_col), true) group_start
    from `project.dataset.table`
  )
)
# order by order_col             

如果应用于您问题中的示例数据 - 输出为