大查询 - 基于顺序分组
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
它将不按顺序对它们进行分类,并将采用最大数量的变量而不是顺序,这不是我要找的,如下所示:
获得预期结果的查询是什么?
您需要查看下一行。使用命令 lead
或 lag
进行此类操作。
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
我有这个数据:
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
它将不按顺序对它们进行分类,并将采用最大数量的变量而不是顺序,这不是我要找的,如下所示:
获得预期结果的查询是什么?
您需要查看下一行。使用命令 lead
或 lag
进行此类操作。
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