大查询 - 基于顺序分组

Big Query - Group By based on Order

我有这个数据:

WITH test_table AS (
  SELECT '1' number, 'eat' activity UNION ALL
  SELECT '2', 'eat' UNION ALL
  SELECT '3', 'drink' UNION ALL 
  SELECT '4', 'eat' UNION ALL 
  SELECT '5', 'drink' UNION ALL
  SELECT '6', 'drink'
)

select *
from test_table
order by 1

会显示成这样

我想分组 他们不仅要基于变量,还要基于顺序。所以我希望得到这样的输出:

基本上,如果我们使用常用方法分组

SELECT 
    MAX(number) as number,
    activity
FROM test_table
group by 2

它将不按顺序对它们进行分类,并将采用最大数量的变量而不是顺序,这不是我要找的,如下所示:

获得预期结果的查询是什么?

您需要查看下一行。使用命令 leadlag 进行此类操作。

WITH test_table AS (
  SELECT '1' number, 'eat' activity UNION ALL
  SELECT '2', 'eat' UNION ALL
  SELECT '3', 'drink' UNION ALL 
  SELECT '4', 'eat' UNION ALL 
  SELECT '5', 'drink' UNION ALL
  SELECT '6', 'drink'
)

Select *
from(
select number, activity , lead (activity) over (order by number) as activity_next
from test_table
)
where activity!=activity_next or activity_next is null
order by 1