在BigQuery中,我有一个如下所示的表:

Order Value
1 A
2 A
3 A
4 B
5 B
7 A
8 A
10 A
11 C

Order列在增加,但并不是在每种情况下都是连续的.Value列可以具有返回值.我需要通过值和值的出现次数的组合为值创建组. 因此,基本上我需要一个新的专栏(组),如下所示:

Order Value Group
1 A 1
2 A 1
3 A 1
4 B 2
5 B 2
7 A 3
8 A 3
10 A 3
11 C 4

我try 在不同的变体中使用Dense_Rank(),这是我得到的最好的结果,但这不是我所需要的.

Order Value dense_rank() over(order by Value) Right solution
1 A 1 1
2 A 1 1
3 A 1 1
4 B 2 2
5 B 2 2
7 A 1 3
8 A 1 3
10 A 1 3
11 C 4 4

测试数据代码:

with test_data as(
    select 1 as _order, 'A' as value
    union all
    select 2 as _order, 'A' as value
    union all
    select 3 as _order, 'A' as value
    union all
    select 4 as _order, 'B' as value
    union all
    select 5 as _order, 'B' as value
    union all
    select 7 as _order, 'A' as value
    union all
    select 8 as _order, 'A' as value
    union all
    select 10 as _order, 'A' as value
    union all
    select 11 as _order, 'C' as value
)
select _order,
       value,
       dense_rank() over(order by value) value_order,
from test_data
order by _order

推荐答案

您可以通过计算标志上的运行计数来解决这个问题,当当前"Value"和以前的"Value"之间发生变化时,该标志具有非空值(1).

WITH cte AS (
    SELECT *, 
           CASE WHEN NOT LAG(Value) OVER(ORDER BY Order) = Value THEN 1 END AS change_flag
    FROM tab
)
SELECT order,
       value,
       COUNT(change_flag) OVER(ORDER BY order) + 1
FROM cte

Sql相关问答推荐

当有空单元格时,如何连接列

SQL查询以条件空值跟踪生产操作结果进展

如何用3个(半)固定位置建模团队,并有效地搜索相同/不同的团队?

SQL查询组类值在同一行中,并连接和排序其他值

LAG函数通过丢弃空值返回前一行

如何利用单列历史SQLsnowflake获得合并结果

在SQL中返回缺省值,即使查询不返回任何结果

如何从Spark SQL的JSON列中提取动态数量的键值对

数据库SQL-CTE命名空间(错误?)使用临时视图

在PostgreSQL中汇总连接表中的 case 值

如何使用jsonn_populate_record()插入到包含IDENTITY列的表中

SQL中相同表内的VLOOKUP等价

SQL 查找 varchar 类型列及其值中多次出现的子字符串

获取上个月和上一年的值

按所选的值将记录分组到不同的列中

MS ACCESS 错误插入 X(...) 从 A 联合 Select ... 从 B

根据是否存在值组合分组并 Select 行

SQL Server 分区和 Run Case 语句

如何使用 pg-promise 创建要在复杂的 sql 查询中使用的 VALUES 列表?

在 PostgreSQL 中,如何将数组中的每个元素用作另一个表中的键?