【问题标题】:Big Query - Group By based on OrderBig Query - 按顺序分组
【发布时间】:2021-08-08 08:17:18
【问题描述】:

我有这些数据:

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

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

得到我期望的结果的查询是什么?

【问题讨论】:

    标签: group-by google-bigquery row-number


    【解决方案1】:

    您需要查看下一行。使用命令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
    

    【讨论】:

      猜你喜欢
      • 2022-01-04
      • 1970-01-01
      • 2018-11-25
      • 2021-04-22
      • 1970-01-01
      • 2016-06-19
      • 2021-12-17
      • 2013-09-13
      • 2011-06-08
      相关资源
      最近更新 更多